В чем разница между 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 соответственно.

Другие вопросы по тегам