a85encode 和 b85encode 有什么区别?

What is the difference between a85encode and b85encode?

Python 3.4 添加了a85encode and b85encode函数(及其对应的解码函数)。

两者有什么区别?文档提到 "They differ by details such as the character map used for encoding.",但这似乎不必要地含糊不清。

a85encode 使用字符映射:

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

其中 z 用作表示四个零字节的特殊情况(而不是 !!!!!)。

b85encode 使用字符映射:

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

没有特殊缩写。


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

Ascii85Base85的前身;两者之间的主要区别是 in-fact 使用的字符集。

Ascii85使用字符集:

ASCII 33 ("!") to ASCII 117 ("u") 

Base85使用字符集:

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

Base85明确不包含这些字符:

"',./:[]\

a85encodeb85encode encode/decode Ascii85分别为Base85.