Jump to content

Ascii85

(Перенаправлено с БТОА )

Ascii85 , также называемый Base85 , представляет собой форму кодирования двоичного текста в текст, разработанную Полом Э. Раттером для утилиты btoa . Используя пять символов ASCII для представления четырех байтов двоичных данных (что делает закодированный размер На 1 4 больше исходного, предполагая восемь бит на символ ASCII), он более эффективен, чем uuencode или Base64 , которые используют четыре символа для представления трех байтов данных ( увеличение на 1 3 , если предположить, что на символ ASCII приходится восемь бит).

Его основные современные применения находятся в форматах файлов Adobe PostScript , и Portable Document Format , а также в кодировании исправлений для двоичных файлов используемых Git . [1]

Основная потребность в кодировании двоичного текста в текст возникает из-за необходимости передавать произвольные двоичные данные по ранее существовавшим протоколам связи , которые были разработаны для передачи только текста , читаемого человеком, на английском языке . Эти протоколы связи могут быть только 7-битными (и при этом избегать определенных управляющих кодов ASCII), могут требовать разрывов строк через определенные максимальные интервалы и не могут поддерживать пробелы . Таким образом, только 94 печатных символа ASCII «безопасны» для передачи данных.

Восемьдесят пять — это минимальное целое значение n такое, что n 5 ≥ 256 4 ; поэтому любая последовательность из 4 байтов может быть закодирована как 5 символов, если доступно не менее 85 различных символов. (Пять цифр по системе счисления -85 могут представлять целые числа от 0 до 4 437 053 124 включительно, чего достаточно для представления всех 4 294 967 296 возможных 4-байтовых последовательностей.)

Кодирование

[ редактировать ]

При кодировании каждая группа из 4 байтов воспринимается как 32-битное двоичное число, начиная со старшего байта (в Ascii85 используется соглашение с обратным порядком байтов ). Это преобразуется путем многократного деления на 85 и получения остатка в 5 цифр по системе счисления 85. Затем каждая цифра (опять же, самая значимая первая) кодируется как печатный символ ASCII путем добавления к ней 33, что дает символам ASCII 33 ( !) через 117 ( u).

Поскольку данные, состоящие из всех нулей, встречаются довольно часто, для сжатия данных делается исключение , и группа, состоящая из всех нулей, кодируется как один символ. z вместо !!!!!.

Группы символов, которые декодируются до значения больше 2. 32 − 1 (закодировано как s8W-!) вызовет ошибку декодирования, как и z персонажи в середине группы. Пробелы между символами игнорируются и могут встречаться где угодно, чтобы учесть ограничения на длину строки.

Ограничения

[ редактировать ]

Исходная спецификация позволяет кодировать только поток, размер которого кратен 4 байтам.

Закодированные данные могут содержать символы , имеющие особое значение во многих языках программирования и в некоторых текстовых протоколах, например левая угловая скобка. <, обратная косая черта \, а также одинарные и двойные кавычки ' & ". Другие кодировки Base-85, такие как Z85 и RFC   1924 спроектирован так, чтобы обеспечить безопасность исходного кода. [2]

версия btoa

[ редактировать ]

Исходная программа btoa всегда кодировала полные группы (при необходимости дополняя исходный код) со строкой префикса «xbtoa Begin» и суффиксной строкой «xbtoa End», за которой следовала исходная длина файла (в десятичном и шестнадцатеричном формате ) и три 32 -битные контрольные суммы . Декодеру необходимо использовать длину файла, чтобы увидеть, какая часть группы была заполнена. Первоначальное предложение по кодированию btoa использовало алфавит кодирования, начиная с символа пробела ASCII до «t» включительно, но он был заменен алфавитом кодирования «!» на «u», чтобы избежать «проблем с некоторыми почтовыми программами (удаление конечных пробелов)». [3] В этой программе также были представлены специальные " z" краткая форма для нулевой группы. В версии 4.2 добавлен " y"исключение для группы всех пробельных символов ASCII (0x20202020).

ZMODEM версия

[ редактировать ]

«Кодировка ZMODEM Pack-7» кодирует группы по 4 октета в группы по 5 печатных символов ASCII аналогично или, возможно, таким же способом, как это делает Ascii85. Когда программа ZMODEM отправляет предварительно сжатые 8-битные файлы данных по 7-битным каналам данных , она использует «кодирование ZMODEM Pack-7». [4]

версия Adobe

[ редактировать ]

Adobe приняла базовую кодировку btoa, но с небольшими изменениями, и дала ей имя Ascii85. Используются символы ASCII 33 ( !) через 117 ( u) включительно (для обозначения цифр по основанию 85 от 0 до 84) вместе с буквой z (как особый случай для представления 32-битного значения 0), а пробелы игнорируются. Adobe использует разделитель " ~>", чтобы отметить конец строки, закодированной Ascii85, и представляет длину путем усечения последней группы: если последний блок исходных байтов содержит менее 4 байтов, перед кодированием блок дополняется до 3 нулевых байтов. После кодирования столько байтов, сколько было добавлено в качестве заполнения, удаляется из конца вывода.

При декодировании применяется обратный процесс: последний блок дополняется до 5 байтов символом Ascii85. u, и столько байтов, которые были добавлены в качестве заполнения, опускаются в конце вывода (см. пример).

Заполнение не является произвольным. Преобразование из двоичного формата в base64 только перегруппирует биты и не меняет их или их порядок (старший бит в двоичном формате не влияет на младшие биты в представлении base64). При преобразовании двоичного числа в base85 (85 не является степенью двойки) старшие биты влияют на младшие цифры base85 и наоборот. Заполнение младшего двоичного значения (нулевыми битами) при кодировании и заполнение верхнего значения base85 (с us) при декодировании гарантирует сохранение старших битов (заполнение нулями в двоичном формате дает достаточно места, чтобы небольшое сложение улавливалось и не было «переноса» в старшие биты).

В блоках с кодировкой Ascii85 символы пробелов и разрывов строк могут присутствовать где угодно, в том числе в середине 5-символьного блока, но их следует игнорировать.

Спецификация Adobe не поддерживает y исключение.

Пример для Ascii85

[ редактировать ]

Цитата из Томаса Гоббса «Левиафана» :

Человек отличается от других животных не только своим разумом, но и этой особой страстью, которая представляет собой похоть ума, которая благодаря стойкости удовольствия от непрерывного и неутомимого познания превосходит кратковременную страсть любого плотского удовольствия. .

Если он изначально закодирован с использованием US-ASCII, его можно перекодировать в Ascii85 следующим образом:

9jqo^BlbD-BleB1DJ+*+F(f,q/0JhKF<GL>[email protected]$d7F!,L7@<6@)/0JDEF<G%<+EV:2F!,O<
DJ+*.@<*K0@<6L(Df-\0Ec5e;DffZ(EZee.Bl.9pF"AGXBPCsi+DGm>@3BB/F*&OCAfu2/AKYi(
DIb:@FD,*)+C]U=@3BN#EcYf8ATD3s@q?d$AftVqCh[NqF<G:8+EV:.+Cf>-FD5W8ARlolDIal(
DId<j@<?3r@:F%a+D58'ATD4$Bl@l3De:,-DJs`8ARoFb/0JMK@qB4^F!,R<AKZ&-DfTqBG%G>u
D.RTpAKYo'+CT/5+Cei#DII?(E,9)oF*2M7/c
Текстовый контент М а н ...
ASCII-код 77 97 110 32 ...
Битовый шаблон 0 1 0 0 1 1 0 1 0 1 1 0 0 0 0 1 0 1 1 0 1 1 1 0 0 0 1 0 0 0 0 0 ...
32-битное значение 1,298,230,816 = 24×85 4 + 73×85 3 + 80×85 2 + 78×85 + 61 ...
База 85 (+33) 24 (57) 73 (106) 80 (113) 78 (111) 61 (94) ...
ASCII-код 9 дж д тот ^ ...
Текстовый контент с в р и
ASCII-код 115 117 114 101
Битовый шаблон 0 1 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 1 1 0 0 1 0 0 1 1 0 0 1 0 1
32-битное значение 1,937,076,837 = 37×85 4 + 9×85 3 + 17×85 2 + 44×85 + 22
База 85 (+33) 37 (70) 9 (42) 17 (50) 44 (77) 22 (55)
ASCII-код Ф * 2 М 7


Поскольку последний четырехкортеж неполный, его необходимо дополнить тремя нулевыми байтами:

Текстовый контент . \0 \0 \0
ASCII-код 46 0 0 0
Битовый шаблон 0 0 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
32-битное значение 771,751,936 = 14×85 4 + 66×85 3 + 56×85 2 + 74×85 + 46
База 85 (+33) 14 (47) 66 (99) 56 (89) 74 (107) 46 (79)
ASCII-код / с И к ТО

Поскольку необходимо было добавить три байта заполнения, три последних символа «YkO» в выводе опускаются.

Декодирование выполняется в обратном порядке, за исключением того, что последний кортеж из пяти элементов дополняется символами «u»:

ASCII-код / с в в в
База 85 (+33) 14 (47) 66 (99) 84 (117) 84 (117) 84 (117)
32-битное значение 771,955,124 = 14×85 4 + 66×85 3 + 84×85 2 + 84×85 + 84
Битовый шаблон 0 0 1 0 1 1 1 0 0 0 0 0 0 0 1 1 0 0 0 1 1 0 0 1 1 0 1 1 0 1 0 0
ASCII-код 46 3 25 180
Текстовый контент . [ ЭТХ ] [ В ] ´ ( Расширенный ASCII )

Поскольку входные данные должны были быть дополнены тремя байтами «u», последние три байта выходных данных игнорируются, и в итоге мы получаем исходную точку.

Входное предложение не содержит 4 последовательных нулевых байта, поэтому в примере не показано использование сокращения «z».

Совместимость

[ редактировать ]

Кодировка Ascii85 совместима с 7-битным и 8-битным MIME , но имеет меньшие накладные расходы, чем Base64 .

Одна из потенциальных проблем совместимости Ascii85 заключается в том, что некоторые из используемых им символов важны в таких языках разметки, как XML или SGML . Чтобы включить данные ascii85 в эти документы, может потребоваться экранирование кавычек , угловых скобок и амперсандов .

Версия RFC 1924 г.

[ редактировать ]

Опубликовано 1 апреля 1996 года , информационное. RFC   1924 : «Компактное представление адресов IPv6» Роберта Эльца предлагает кодировку IPv6- адресов по основанию 85 в качестве первоапрельской шутки. Это отличается от схемы, использованной выше, тем, что он предлагает другой набор из 85 символов ASCII и предлагает выполнять всю арифметику над 128-битным числом, преобразуя его в одно 20-значное число по основанию 85 (внутренние пробелы не допускаются). , а не разбивать его на четыре 32-битные группы.

Предлагаемый набор символов по порядку: 09, AZ, az, а затем 23 символа !#$%&()*+-;<=>?@^_`{|}~. Максимально возможный представимый адрес, 2 128 −1 = 74×85 19  + 53×85 18  + 5×85 17 + ..., будет закодировано как =r54lj&NUUO~Hi%c2ym0.

Этот набор символов исключает символы "',./:[\] , что делает его пригодным для использования в JSON (где строках " и \ потребуется побег). Однако для протоколов на основе SGML, в частности, включая XML, по-прежнему может потребоваться экранирование строк (чтобы приспособить <, > и &).

См. также

[ редактировать ]
  1. ^ Хамано, Джунио С (5 мая 2006 г.). «[PATCH] бинарный патч» . мерзавец . Архивировано из оригинала 26 июля 2020 г.
  2. ^ "32/Z85" в ZeroMQ RFC
  3. ^ Орост, Джо (26 марта 1991 г.). «Re: СЖАТИЕ двоичных данных в ASCII для отправки по почте. Re: Кодирование двоичных данных в ASCII для отправки по почте» . Группы Google . Проверено 11 апреля 2015 г.
  4. ^ Чак Форсберг. «Последние разработки в ZMODEM» . omen.com . Архивировано из оригинала 24 сентября 2015 г. Проверено 14 мая 2013 г. . «ZMODEM Pack-7 упаковывает 4 байта в 5 печатных символов».
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 7d920d338f58f22d253676ee455eff47__1720041660
URL1:https://arc.ask3.ru/arc/aa/7d/47/7d920d338f58f22d253676ee455eff47.html
Заголовок, (Title) документа по адресу, URL1:
Ascii85 - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)