当前位置: 首页 > 翻译 > 正文

Base85中文简介

Base85是一个偶然接触到的,在这之前也只知道base64编码方式,但是鉴于Base85没有中文的资料(至少没有百度出来),我也就靠着我这破英语和Google翻译的帮助,将base85的维基百科的英文词条简单的翻译了下,

首先要解释下,由于我的英语属于那种很烂的地步,因此文中很多的单词和句子不知道如何翻译,请大家再看的时候,如果是知道如何翻译或者是有翻译错误的话,还望指出,另外,因为文中涉及了很多的专业英语词汇,有的词汇我就没有翻译了,感兴趣或者是不知道的朋友可以参考后面的备注的地址

另外 Base85的维基百科词条地址:http://en.wikipedia.org/wiki/Base85
一下是我根据词条的翻译,希望不要见笑,这是我第一次翻译这么长的词条:

简介:

    Ascii85(也称base85)是Paul E. Rutter为提高btoa效率开发的一种二进制转文本的编码方式,通过利用5个ascii字符来表示是四字节的二进制数据(如果我们假设每个ascii字符占8bit的话,那么编码后的长度增加了原长度的1/4),他是比base64、unencode 等利用四个ascii字符表示3字节二进制数据的更加有效的编码方式,(这里我们同样假设每个ascii字符占8bit,与原长度相比,编码后增加了原长度的1/3)

    base85是Adobe’s PostScript和Portable Document Format(注:PDF)的主要编码模块

Basic Idea(基本思路):

       开发binary-to-text编码的基本思路是为了开发在现有的交流协议之上能够使用任意二进制数据来表示可读(Human-Readable)的内容的 一种编码方式,在大多数的交流协议中,只有7 bit是安全的(避免包含Ascii的控制位),在最大的间隔中可能包含换行符或者是EOF(注:原 句不知道如何翻译,原句:and may require line breaks at certain maximum intervals, 另外语句中有一个计算机词汇Line break),并且不会有空格符,因此,仅仅只有94个 安全的可打印的字符(注:printable ASCII characters) 可用于转换数据

       4字节可以表示 2^32次方(共4,294,967,296)个可能的值,85的5次方提供了4437053125个可能的值,可以看出完全可以唯一代表32bit可 能的值,富有远见性的是,85^4次方能够表示4182119424个数值,85的5次方是基于5个ascii字符表示4byte的最好且最小选择

      在编码的时候,每4个字符对应的ascii值产生一个32位的二进制数,对于这个32位的二进制数,标识位优先(注:原句:most significant byte first)(Ascii使用Big-Endian标准),在转换过程中,通过将这个32位的二进制数转换为85进制(以85为基数)(注:原句没有读懂 ,但是根据后面的演示大致是这个意思)得到5个数值(因为85进制中,5个数值的最高位的权是 84^4 ,后面依次是 84^3 ,84^2,84^1,84^0,那么可以表示的数最大为 84^5 -1,那么可以完全表示32位二进制数),然后将得到的这5个数值每个都加上33 ,将得 到后的每一位的值作为ascii值重新表示为 “!”(ascii:33) 到 “u”(ascii:117)中的一个字符

    因为全0的数据是普遍存在的,因此对于这样的情况为了数据的压缩的目的有一个例外:全0的数据在编码时,使用字符”z”来代替”!!!!!”, 编码一个大于2^32-1的数(比如”s8W-!”)时将会导致在解码时出现错误,或字符”z”出现在编码组中间时,为了适应长度的限制,空格被忽 略可能发生在任何地方(注:原句不知道如何翻译:White space between the characters is ignored and may occur anywhere to accommodate line-length limitations.)

   编码后的数据中包含像反斜杠、引用等转义字符也是base85的缺点之一,因为这些字符在一些编程语言或基于文本的协议中有特殊的含义

btoa 版本

        原始的btoa版本总是编码全部的编码组(填充原始数据是必要的),以”xbtoa Begin”作为开始前缀,”xbtoa End”作为结束后缀,同时包含 了原始文件的长度(十进制或十六进制表示)和32bit的校验和,在译码的时候,需要是用到文件的长度去确认填充数的个数,同时,这个 版本也使用特殊的”z”来缩短全0的数据,4.23版本增加了字符”y”来表示全空格的数据

Adobe版本

         Adobe 继承了基本的btoa编码思路,但是也有些细微的感动,并且命名为ascii85,特别的,Adobe使用”~>“来标记Ascii85编码数据字符 串的结束,如果原始数据最后的一块少于4byte,编码算法会会在编码前在后面增加”null“byte使之能够满足4 byte,在编码后,被增加的 填充字符编码后的结果会从编码后的结果中的最后被移除(注:移除的个数为填充的null byte的个数,详情可以参考例子),

         同样的方式可用于解码,当最后的块不够5 byte时,解码算法增加填充字符”u”,在解码后的原文中,被增加的填充字符解码后的数据将会 被忽略(详情参考例子)

          注意:填充不是随意的,从二进制转为base64仅仅重组bit,并且不会改变他们和他们的顺序(在base64中,高位的改变不会影响到低位), 但是在从二进制转为base85时,高位的bit将会影响到低位的base85数字的顺序和转换,在编码时,对二进制的低位使用0填充,在译码时 使用字符”u”填充base85的高位,确保了高位bit能够被保留(二进制使用0填充提供了足够的空间,避免了a small addition is trapped( :不知如何翻译)并且没有向高位进位)

         在ascii85编码后的块中,空格和换行符或EOF能够在任何地方被表示,包括在5字符块的中间,但是他们必须被忽略,Adobe也不支持”y” 字符的例外

例子:

引用来自Thomas Hobbes’s Leviathan:

下面是原始的base85编码后的数据和base85重编码的例子:

base85编码后的数据:

<~9jqo^BlbD-BleB1DJ+*+F(f,q/0JhKF<GL>Cj@.4Gp$d7F!,L7@<6@)/0JDEF<G%<+EV:2F!,
O<DJ+*.@<*K0@<6L(Df-\0Ec5e;DffZ(EZee.Bl.9pF"AGXBPCsi+DGm>@3BB/F*&OCAfu2/AKY
i(DIb:@FD,*)+C]U=@3BN#EcYf8ATD3s@q?d$AftVqCh[NqF<G:8+EV:.+Cf>-FD5W8ARlolDIa
l(DId<j@<?3r@:F%a+D58'ATD4$Bl@l3De:,-DJs`8ARoFb/0JMK@qB4^F!,R<AKZ&-DfTqBG%G
>uD.RTpAKYo'+CT/5+Cei#DII?(E,9)oF*2M7/c~>

最后的块没有4byte,通过在后面填充3byte的0字节,得到新的4 个字符 ,填充了数据后,最后的三个字符”YkO”将从输出结果中被忽略,

在解码时就反过来,最后的块不足5byte,通过在最后填充3个”u”字符得到新的完整的块 在被填充了”u”字符后,最后3个byte的译码后的结果将会被忽略并且we end up with the original period(:不知道如何翻译,不过不影响理解)

        注意:输入的句子中没有包含4个全0的字符,因此在结果中没有出现”z”缩写字符 兼容性: Base85编码兼容7-bit和8-bit的MIME(注:Multipurpose Internet Mail Extensions ),并且相对于base64有更低的开销 Base85另外一个潜在的兼容性问题是单引号和双引号的问题,在XML或者是SGML中,括号(<>)和&不能用于做转义字符

RFC 1924版本

      该版本与1996年4月1是发布,虽然在愚人节发布,但并不意味着这是一个玩笑,更多的信息可以参看:RFC 1924,Robert Elz 建议采用base85这种更加紧凑的编码方式作为IPV6地址的表示方法,并且在IPV6使用base85的编码也与前面的介绍的编码方式不同,因为IPv6有128bit,将IPV6地址转换为20个单独的Base 85 字符,(空格不被允许),而不是分成四个32-bit的分组

     建议的字符: 0–9, A–Z, a–z, 和23个字符 !#$%&()*+-;<=>?@^_`{|}~,最大的可能的地址,2^128-1 = 74*85^19+53×85^18 + 5×85^17 + …,编码后就为:=r54lj&NUUO~Hi%c2ym0 另外为了避免包含有问题的字符(“‘,./:[]\) RFC选择了不同的字符 , 并且在基于SGML的协议上仍然需要转移,特别是XML



本文固定链接: http://kuaile.in/archives/980 | 蒲公英的博客

该日志由 蒲公英 于2012年05月28日发表在 翻译 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: Base85中文简介 | 蒲公英的博客
关键字:

Base85中文简介:等您坐沙发呢!

发表评论


You must enable javascript to see captcha here!

快捷键:Ctrl+Enter