Uuencoding (UUE) — вид кодування двійкових даних, який бере початок від Unix-програми uuencode і спочатку використовувався для кодування двійкових даних з метою передавання через поштову систему UUCP.
Назва uuencoding походить віл Unix-to-Unix encoding. Оскільки UUCP конвертує символи між різними наборами, uuencode використовується для конвертування даних, які не повинні транслюватися при переході між наборами символів. Шляхом кодування таких даних у підмножину символів, спільну для більшості наборів, закодована форма таких файлів малоймовірно буде зруйнована «транслюванням». Програма uudecode здійснює зворотню дію до uuencode, точно відтворюючи початковий двійковий файл. Пара uuencode/uudecode стала популярною для пересилання бінарних файлів електронною поштою або опублікування їх у групах новин Usenet.
Формат закодованих даних
Закодований файл починається заголовком виду:
begin <mode> <file><newline>
<mode> — права доступу до файлу як три вісімкові цифри, наприклад 644, 744. Як правило мають значення дише для unix-like операційних систем.
<file> — ім'я файлу, яке має бути використане при створенні відновленого файлу.
<newline> — символ newline, використовується для закінчення рядка.
Кожен рядок даних використовує наступний формат:
<length character><formatted characters><newline>
<length character> — символ, який позначає кількість байтів даних, закодованих у цьому рядку. Це ASCII-символ, отриманий додаванням 32 до реальної кількості байтів з єдиним виключенням для символу гравіс `
(ASCII-код 96), який позначає 0 байтів. Всі рядки даних, крім останнього (якщо довжина не кратна 45), мають 45 байтів закодованих даних (60 символів після кодування). Відповідно, більшість символів довжини є «М», (32 + 45 = код ASCII 77, тобто «М»).
<formatted characters> — закодовані символи. Деталі реалізації описані нижче у розділі «механізм форматування».
Файл закінчується двома рядками
`<newline> end<newline>
Передостанній рядок містить символ «гравіс» як ознаку довжини у 0 байтів.
Звичайний текстовий файл з назвою cat.txt
, що складається лише з символів Cat
, після кодування матиме вигляд:
begin 644 cat.txt #0V%T ` end
Алгоритм кодування
Алгоритм кодування uuencoding повторює наступні операції для кожних трьох байтів:
- Взяти 3 байти з вхідного потоку, загалом 24 біти.
- Розбити порцію на чотири 6-бітових групи, кожна з яких дає числа в діапазоні від 0 до 63: біти (00-05), (06-11), (12-17) та (18-23).
- Додати 32 до кожного значення. Таким чином, можливі результати можуть бути від 32 (
_
знак підкреслення). Розширює цей діапазон код 96 (`
гравіс), який використовується як «спеціальний символ». - Передати на вихід ASCII-еквіваленти отриманих чисел.
Якщо довжина вхідного файлу не ділиться на 3, остання 4-байтова секція вихідного файлу міститиме байти-заповнювачі до найближчого кратного трьом значення. Ці байти не враховуються у полі <length character>, тому декодер не додасть до файлу небажані [en].
uudecoding працює обернено до описаного вище — віднімає 32 з ASCII-коду кожного символу, компонує чотири 6-бітові фрагменти у 24-бітове слово і видає на вихід 3 байти.
Процес кодування для показаного вище рядка «Cat» показано у таблиці:
Початкові символи | C | a | t | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Десятковий код ASCII | 67 | 97 | 116 | |||||||||||||||||||||
Двійковий код ASCII | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 0 |
Нові десяткові значення | 16 | 54 | 5 | 52 | ||||||||||||||||||||
+32 | 48 | 86 | 37 | 84 | ||||||||||||||||||||
Символи uuencode | 0 | V | % | T |
Таблиця кодів
Наступна таблиця показує перетворення отриманих у процесі кодування 6-бітових полів у відповідні їм ASCII-коди та символи.
Зауважте, що код 96 (`
гравіс) зустрічається у закодованих файлах, але зазвичай він використовується лише для позначення рядка нульової довжини в кінці файлу. Він ніколи не виникає у реальних конвертованих даних природним чином, оскільки його код виходить за межі діапазону від 32 до 95. Єдиним винятком є те, що деякі програми використовували символ «гравіс» замість пробілу для позначення байтів-заповнювачів. Однак, символ для позначення байтів-заповнювачів не стандартизовано, тому можливе використання будь-якого з цих двох.
шість бітів | код ASCII | символ ASCII | шість бітів | код ASCII | символ ASCII | шість бітів | код ASCII | символ ASCII | шість бітів | код ASCII | символ ASCII | |||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
00 | 32 | SP | 16 | 48 | 0 | 32 | 64 | @ | 48 | 80 | P | |||
01 | 33 | ! | 17 | 49 | 1 | 33 | 65 | A | 49 | 81 | Q | |||
02 | 34 | " | 18 | 50 | 2 | 34 | 66 | B | 50 | 82 | R | |||
03 | 35 | # | 19 | 51 | 3 | 35 | 67 | C | 51 | 83 | S | |||
04 | 36 | $ | 20 | 52 | 4 | 36 | 68 | D | 52 | 84 | T | |||
05 | 37 | % | 21 | 53 | 5 | 37 | 69 | E | 53 | 85 | U | |||
06 | 38 | & | 22 | 54 | 6 | 38 | 70 | F | 54 | 86 | V | |||
07 | 39 | ' | 23 | 55 | 7 | 39 | 71 | G | 55 | 87 | W | |||
08 | 40 | ( | 24 | 56 | 8 | 40 | 72 | H | 56 | 88 | X | |||
09 | 41 | ) | 25 | 57 | 9 | 41 | 73 | I | 57 | 89 | Y | |||
10 | 42 | * | 26 | 58 | : | 42 | 74 | J | 58 | 90 | Z | |||
11 | 43 | + | 27 | 59 | ; | 43 | 75 | K | 59 | 91 | [ | |||
12 | 44 | , | 28 | 60 | < | 44 | 76 | L | 60 | 92 | \ | |||
13 | 45 | - | 29 | 61 | = | 45 | 77 | M | 61 | 93 | ] | |||
14 | 46 | . | 30 | 62 | > | 46 | 78 | N | 62 | 94 | ^ | |||
15 | 47 | / | 31 | 63 | ? | 47 | 79 | O | 63 | 95 | _ |
Недоліки
Uuencoding кодує кожні три байти вхідного файлу чотирма і додає теги початку та кінця, ім'я файлу і розділювачі. У порівнянні з первинним файлом це додає не менше, ніж 33 % додаткових витрат, які, втім, можуть бути компенсовані стисненням файлу перед кодуванням.
Формат UUE походить з тих часів, коли не було формального визначення листа електронної пошти з підтримкою мультимедійних форматів. В більшості поштових клієнтів закодований бінарний файл виглядає як шматок «комп'ютерної абракадабри» в тексті повідомлення. На відміну від цього, у листі формату MIME всі [en] будуть відділені від тексту повідомлення, у більшості графічних клієнтів — з інтерактивними іконками для перегляду, зберігання та інших маніпуляцій з вкладеннями. MIME забезпечує підтримку різних типів вкладень та наборів символів.
Незважаючи на обмежений набір символів, uuencode-дані іноді спотворюються при проходженні через деякі комп'ютери, які використовують не ASCII (наприклад, EBCDIC). Однією зі спроб виправити ситуацію був формат [en], який використовує лише алфавітно-цифрові дані та символи «плюс» і «мінус». Найбільше поширення отримав формат Base64, який також базується на концепції кодування лише алфавітно-цифровими символами на відміну від ASCII-діапазону 32–95, який включає пробіл та різноманітні символи пунктуації. Всі три формати використовують 6 бітів (64 різних символи) для кодування вхідних даних.
Іншою альтернативою є формат Ascii85, який кодує чотири двійкові байти п'ятьма ASCII-символами. Ascii85 застосовується для кодування даних у форматах PostScript та PDF.
Підтримка в Python
Мова програмування Python підтримує uuencoding за допомогою кодека uu модуля codecs:
$ python -c 'print "Cat".encode("uu")' begin 666 <data> #0V%T end $ python -c 'print "begin 666 <data>\n#0V%T\n \nend\n".decode("uu")' Cat $
Підтримка в Perl
Мова програмування Perl підтримує uuencoding за допомогою операторів pack() та unpack() з форматним рядком «u»:
$ perl -e 'print pack("u","Cat")' #0V%T $ perl -e 'print unpack("u", "#0V%T"), "\n"' Cat $
Посилання
- uuencode [ 3 березня 2016 у Wayback Machine.] в POSIX.1-2008
- UUENCODE-UUDECODE [ 14 лютого 2016 у Wayback Machine.] — вільний онлайновий конвертор
- GNU-sharutils [ 1 березня 2016 у Wayback Machine.] — open source набір утиліт shar/unshar/uuencode/uudecode для GNU Linux
- UUDeview [ 21 січня 2016 у Wayback Machine.] — open-source програма для кодування/декодування Base64, BinHex, uuencode, xxencode і т. д. для Unix/Windows/DOS
- StUU [ 22 січня 2016 у Wayback Machine.] — Open Source UUDecoder для Macintosh
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Skorochennya UUE takozh maye inshi znachennya Uuencoding UUE vid koduvannya dvijkovih danih yakij bere pochatok vid Unix programi uuencode i spochatku vikoristovuvavsya dlya koduvannya dvijkovih danih z metoyu peredavannya cherez poshtovu sistemu UUCP Nazva uuencoding pohodit vil Unix to Unix encoding Oskilki UUCP konvertuye simvoli mizh riznimi naborami uuencode vikoristovuyetsya dlya konvertuvannya danih yaki ne povinni translyuvatisya pri perehodi mizh naborami simvoliv Shlyahom koduvannya takih danih u pidmnozhinu simvoliv spilnu dlya bilshosti naboriv zakodovana forma takih fajliv malojmovirno bude zrujnovana translyuvannyam Programa uudecode zdijsnyuye zvorotnyu diyu do uuencode tochno vidtvoryuyuchi pochatkovij dvijkovij fajl Para uuencode uudecode stala populyarnoyu dlya peresilannya binarnih fajliv elektronnoyu poshtoyu abo opublikuvannya yih u grupah novin Usenet Format zakodovanih danihZakodovanij fajl pochinayetsya zagolovkom vidu begin lt mode gt lt file gt lt newline gt lt mode gt prava dostupu do fajlu yak tri visimkovi cifri napriklad 644 744 Yak pravilo mayut znachennya dishe dlya unix like operacijnih sistem lt file gt im ya fajlu yake maye buti vikoristane pri stvorenni vidnovlenogo fajlu lt newline gt simvol newline vikoristovuyetsya dlya zakinchennya ryadka Kozhen ryadok danih vikoristovuye nastupnij format lt length character gt lt formatted characters gt lt newline gt lt length character gt simvol yakij poznachaye kilkist bajtiv danih zakodovanih u comu ryadku Ce ASCII simvol otrimanij dodavannyam 32 do realnoyi kilkosti bajtiv z yedinim viklyuchennyam dlya simvolu gravis ASCII kod 96 yakij poznachaye 0 bajtiv Vsi ryadki danih krim ostannogo yaksho dovzhina ne kratna 45 mayut 45 bajtiv zakodovanih danih 60 simvoliv pislya koduvannya Vidpovidno bilshist simvoliv dovzhini ye M 32 45 kod ASCII 77 tobto M lt formatted characters gt zakodovani simvoli Detali realizaciyi opisani nizhche u rozdili mehanizm formatuvannya Fajl zakinchuyetsya dvoma ryadkami lt newline gt end lt newline gt Peredostannij ryadok mistit simvol gravis yak oznaku dovzhini u 0 bajtiv Zvichajnij tekstovij fajl z nazvoyu cat txt sho skladayetsya lishe z simvoliv Cat pislya koduvannya matime viglyad begin 644 cat txt 0V T endAlgoritm koduvannyaAlgoritm koduvannya uuencoding povtoryuye nastupni operaciyi dlya kozhnih troh bajtiv Vzyati 3 bajti z vhidnogo potoku zagalom 24 biti Rozbiti porciyu na chotiri 6 bitovih grupi kozhna z yakih daye chisla v diapazoni vid 0 do 63 biti 00 05 06 11 12 17 ta 18 23 Dodati 32 do kozhnogo znachennya Takim chinom mozhlivi rezultati mozhut buti vid 32 probil do 95 znak pidkreslennya Rozshiryuye cej diapazon kod 96 gravis yakij vikoristovuyetsya yak specialnij simvol Peredati na vihid ASCII ekvivalenti otrimanih chisel Yaksho dovzhina vhidnogo fajlu ne dilitsya na 3 ostannya 4 bajtova sekciya vihidnogo fajlu mistitime bajti zapovnyuvachi do najblizhchogo kratnogo trom znachennya Ci bajti ne vrahovuyutsya u poli lt length character gt tomu dekoder ne dodast do fajlu nebazhani en uudecoding pracyuye oberneno do opisanogo vishe vidnimaye 32 z ASCII kodu kozhnogo simvolu komponuye chotiri 6 bitovi fragmenti u 24 bitove slovo i vidaye na vihid 3 bajti Proces koduvannya dlya pokazanogo vishe ryadka Cat pokazano u tablici Pochatkovi simvoli C a tDesyatkovij kod ASCII 67 97 116Dvijkovij kod ASCII 0 1 0 0 0 0 1 1 0 1 1 0 0 0 0 1 0 1 1 1 0 1 0 0Novi desyatkovi znachennya 16 54 5 52 32 48 86 37 84Simvoli uuencode 0 V TTablicya kodivNastupna tablicya pokazuye peretvorennya otrimanih u procesi koduvannya 6 bitovih poliv u vidpovidni yim ASCII kodi ta simvoli Zauvazhte sho kod 96 gravis zustrichayetsya u zakodovanih fajlah ale zazvichaj vin vikoristovuyetsya lishe dlya poznachennya ryadka nulovoyi dovzhini v kinci fajlu Vin nikoli ne vinikaye u realnih konvertovanih danih prirodnim chinom oskilki jogo kod vihodit za mezhi diapazonu vid 32 do 95 Yedinim vinyatkom ye te sho deyaki programi vikoristovuvali simvol gravis zamist probilu dlya poznachennya bajtiv zapovnyuvachiv Odnak simvol dlya poznachennya bajtiv zapovnyuvachiv ne standartizovano tomu mozhlive vikoristannya bud yakogo z cih dvoh shist bitiv kod ASCII simvol ASCII shist bitiv kod ASCII simvol ASCII shist bitiv kod ASCII simvol ASCII shist bitiv kod ASCII simvol ASCII00 32 SP 16 48 0 32 64 48 80 P01 33 17 49 1 33 65 A 49 81 Q02 34 18 50 2 34 66 B 50 82 R03 35 19 51 3 35 67 C 51 83 S04 36 20 52 4 36 68 D 52 84 T05 37 21 53 5 37 69 E 53 85 U06 38 amp 22 54 6 38 70 F 54 86 V07 39 23 55 7 39 71 G 55 87 W08 40 24 56 8 40 72 H 56 88 X09 41 25 57 9 41 73 I 57 89 Y10 42 26 58 42 74 J 58 90 Z11 43 27 59 43 75 K 59 91 12 44 28 60 lt 44 76 L 60 92 13 45 29 61 45 77 M 61 93 14 46 30 62 gt 46 78 N 62 94 15 47 31 63 47 79 O 63 95 NedolikiUuencoding koduye kozhni tri bajti vhidnogo fajlu chotirma i dodaye tegi pochatku ta kincya im ya fajlu i rozdilyuvachi U porivnyanni z pervinnim fajlom ce dodaye ne menshe nizh 33 dodatkovih vitrat yaki vtim mozhut buti kompensovani stisnennyam fajlu pered koduvannyam Format UUE pohodit z tih chasiv koli ne bulo formalnogo viznachennya lista elektronnoyi poshti z pidtrimkoyu multimedijnih formativ V bilshosti poshtovih kliyentiv zakodovanij binarnij fajl viglyadaye yak shmatok komp yuternoyi abrakadabri v teksti povidomlennya Na vidminu vid cogo u listi formatu MIME vsi en budut viddileni vid tekstu povidomlennya u bilshosti grafichnih kliyentiv z interaktivnimi ikonkami dlya pereglyadu zberigannya ta inshih manipulyacij z vkladennyami MIME zabezpechuye pidtrimku riznih tipiv vkladen ta naboriv simvoliv Nezvazhayuchi na obmezhenij nabir simvoliv uuencode dani inodi spotvoryuyutsya pri prohodzhenni cherez deyaki komp yuteri yaki vikoristovuyut ne ASCII napriklad EBCDIC Odniyeyu zi sprob vipraviti situaciyu buv format en yakij vikoristovuye lishe alfavitno cifrovi dani ta simvoli plyus i minus Najbilshe poshirennya otrimav format Base64 yakij takozh bazuyetsya na koncepciyi koduvannya lishe alfavitno cifrovimi simvolami na vidminu vid ASCII diapazonu 32 95 yakij vklyuchaye probil ta riznomanitni simvoli punktuaciyi Vsi tri formati vikoristovuyut 6 bitiv 64 riznih simvoli dlya koduvannya vhidnih danih Inshoyu alternativoyu ye format Ascii85 yakij koduye chotiri dvijkovi bajti p yatma ASCII simvolami Ascii85 zastosovuyetsya dlya koduvannya danih u formatah PostScript ta PDF Pidtrimka v PythonMova programuvannya Python pidtrimuye uuencoding za dopomogoyu kodeka uu modulya codecs python c print Cat encode uu begin 666 lt data gt 0V T end python c print begin 666 lt data gt n 0V T n nend n decode uu Cat Pidtrimka v PerlMova programuvannya Perl pidtrimuye uuencoding za dopomogoyu operatoriv pack ta unpack z formatnim ryadkom u perl e print pack u Cat 0V T perl e print unpack u 0V T n Cat Posilannyauuencode 3 bereznya 2016 u Wayback Machine v POSIX 1 2008 UUENCODE UUDECODE 14 lyutogo 2016 u Wayback Machine vilnij onlajnovij konvertor GNU sharutils 1 bereznya 2016 u Wayback Machine open source nabir utilit shar unshar uuencode uudecode dlya GNU Linux UUDeview 21 sichnya 2016 u Wayback Machine open source programa dlya koduvannya dekoduvannya Base64 BinHex uuencode xxencode i t d dlya Unix Windows DOS StUU 22 sichnya 2016 u Wayback Machine Open Source UUDecoder dlya Macintosh