a85encode和b85encode有什么区别?

orl*_*rlp 9 python base85 python-3.4

Python 3.4添加了a85encodeb85encode函数(及其相应的解码函数).

两者有什么区别?该文档提到"它们因用于编码的字符映射等细节而不同".,但这似乎不必要地含糊不清.

dus*_*uff 9

a85encode 使用字符映射:

!"#$%&'()*+,-./0123456789:;<=>?@
ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`
abcdefghijklmnopqrstu
Run Code Online (Sandbox Code Playgroud)

z作为一种特殊情况,以表示四个零字节(而不是!!!!!).

b85encode 使用字符映射:

0123456789
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
!#$%&()*+-;<=>?@^_`{|}~
Run Code Online (Sandbox Code Playgroud)

没有特殊的缩写.


如果您有选择,我建议您使用a85encode.它实现起来更容易(也更有效)C,因为它的字符映射使用ASCII顺序中的所有字符,并且在存储包含大量零的数据时效率稍高,这对于未压缩的二进制数据来说并不罕见.

  • @ l'll我想你很困惑。Ascii85不会通过不变地传递字符。字符映射中不使用“ z”。(它以`u`结尾;请参见上文。)所以没有逃避。 (2认同)

l'L*_*L'l 6

ASCII85是前身Base85 ; 两者之间的主要区别实际上是使用的字符集.

Ascii85 使用字符集:

ASCII 33 ("!") to ASCII 117 ("u") 
Run Code Online (Sandbox Code Playgroud)

Base85 使用字符集:

0–9, A–Z, a–z, !#$%&()*+-;<=>?@^_`{|}~
Run Code Online (Sandbox Code Playgroud)

这些字符特别不包含在Base85中:

"',./:[]\\
Run Code Online (Sandbox Code Playgroud)

a85encodeb85encode分别编码/解码Ascii85Base85.