Ascii85

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Ascii85, також відома як Base85 — форма кодування двійкових даних, розроблена для утиліти btoa. Використовуючи 5 ASCII літер для представлення 4 байтів двійкових даних (що робить розмір закодованих даних на чверть більшим за оригінал, в разі використання 8-бітних ASCII символів), тому це кодування краще за uuencode і Base64, які для представлення 3х байтів використовують 4 символи (розмір збільшується на третину за тих же умов).

Нині головним чином використовується у файлових форматах PostScript компанії Adobe та Portable Document Format.

Головна ідея

[ред. | ред. код]

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

Версія Adobe

[ред. | ред. код]

Приклад

[ред. | ред. код]

Наприклад, історичне гасло Вікіпедії,

Man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure.

виглядає у Ascii85 кодуванні наступним чином:

<~9jqo^BlbD-BleB1DJ+*+F(f,q/0JhKF<GL>Cj@.4Gp$d7F!,L7@<6@)/0JDEF<G%<+EV:2F!,
O<DJ+*.@<*K0@<6L(Df-\0Ec5e;DffZ(EZee.Bl.9pF"AGXBPCsi+DGm>@3BB/F*&OCAfu2/AKY
i(DIb:@FD,*)+C]U=@3BN#EcYf8ATD3s@q?d$AftVqCh[NqF<G:8+EV:.+Cf>-FD5W8ARlolDIa
l(DId<j@<?3r@:F%a+D58'ATD4$Bl@l3De:,-DJs`8ARoFb/0JMK@qB4^F!,R<AKZ&-DfTqBG%G
>uD.RTpAKYo'+CT/5+Cei#DII?(E,9)oF*2M7/c~>
Текстовий вміст M a n ... s u r e
ASCII 77 97 110 32 ... 115 117 114 101
Двійковий вигляд 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 ... 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-бітне значення 1298230816 = 24×854 + 73×853 + 80×852 + 78×85 + 61 ... 1937076837 = 37×854 + 9×853 + 17×852 + 44×85 + 22
Base 85 (+33) 24 (57) 73 (106) 80 (113) 78 (111) 61 (94) ... 37 (70) 9 (42) 17 (50) 44 (77) 22 (55)
ASCII 9 j q o ^ ... F * 2 M 7

Оскільки остання четвірка неповна, її треба доповнити трьома нульовими байтами:

Text content . \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×854 + 66×853 + 56×852 + 74×85 + 46
Base 85 (+33) 14 (47) 66 (99) 56 (89) 74 (107) 46 (79)
ASCII / c Y k O

--> Since three bytes of padding had to be added, the three final characters 'YkO' are omitted from the output.

Decoding is done inversely, except that the last 5-tuple is padded with 'u' characters:

ASCII / c u u u
Base 85 (+33) 14 (47) 66 (99) 84 (117) 84 (117) 84 (117)
32-bit Value 771,955,124 = 14×854 + 66×853 + 84×852 + 84×85 + 84
Bit pattern 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
Text content . [ ETX ] [ EM ] undefined

Since the input had to be padded with three 'u' bytes, the last three bytes of the output are ignored and we end up with the original period.

Note that the input sentence does not contain 4 consecutive zero bytes, so the example does not show the use of the 'z' abbreviation.


Сумісність

[ред. | ред. код]

Ascii85 кодування сумісне з 7-бітним та 8-бітним MIME, маючи менший розмір ніж Base64.

Єдина проблема полягає в тому, що кодування Ascii85 містить символи (одинарні ' та подвійні " лапки, прямі дужки та амперсанд &), які мають бути екрановані в мовах розмітки на зразок XML або SGML.

Див. також

[ред. | ред. код]

Посилання

[ред. | ред. код]