В чем разница между a85encode и b85encode?
Python 3.4 добавил a85encode
а также b85encode
функции (и соответствующие им функции декодирования).
Какая разница между двумя? В документации упоминается "Они отличаются деталями, такими как карта символов, используемая для кодирования"., но это кажется излишне расплывчатым.
2 ответа
a85encode
использует отображение символов:
!"#$%&'()*+,-./0123456789:;<=>?@
ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`
abcdefghijklmnopqrstu
с z
используется как особый случай для представления четырех нулевых байтов (вместо !!!!!
).
b85encode
использует отображение символов:
0123456789
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
!#$%&()*+-;<=>?@^_`{|}~
без специальных сокращений.
Если у вас есть выбор, я бы порекомендовал вам использовать a85encode
, Это немного проще (и более эффективно) реализовать в C
, так как его отображение символов использует все символы в порядке ASCII, и он немного более эффективен при хранении данных, содержащих множество нулей, что не редкость для несжатых двоичных данных.
Ascii85 является предшественником Base85; основное различие между ними заключается в фактически используемых наборах символов.
Ascii85
использует набор символов:
ASCII 33 ("!") to ASCII 117 ("u")
Base85
использует набор символов:
0–9, A–Z, a–z, !#$%&()*+-;<=>?@^_`{|}~
Эти символы специально не включены в Base85:
"',./:[]\\
a85encode и b85encode кодируют / декодируют Ascii85 и Base85 соответственно.