Uuencoding - Uuencoding

uuencoding формасы болып табылады мәтіннен екілікке дейін кодтау шыққан Unix бағдарламалар uencode және құпия код жазылған Мэри Энн Хортон Беркли университетінде 1980 ж.[1] үшін кодтау екілік электрондық пошта жүйелерінде жіберуге арналған мәліметтер.

«Uuencoding» атауы «Unix-Unix кодтауынан» шыққан, яғни Unix файлдарын бір Unix жүйесінен басқа Unix жүйесіне жіберу үшін қауіпсіз кодтауды қолдану идеясы, бірақ аралық сілтемелердің барлығы Unix жүйелері болатындығына кепілдік жоқ. Электрондық пошта хабарламасы әртүрлі компьютерлерге немесе басқа компьютерлерге жіберілуі мүмкін болғандықтан таңбалар жиынтығы немесе жоқ көліктер арқылы жүзеге асырылады 8 биттік таза немесе жоқ бағдарламалармен өңделеді 8 биттік таза, екілік файлды электрондық пошта арқылы жіберу оның бүлінуіне әкелуі мүмкін. Мұндай деректерді көптеген таңбалар жиынтығына ортақ таңбалар жиынтығына кодтау арқылы, мұндай деректер файлдарының кодталған формасы «аударылған» немесе бүлінген болуы екіталай еді, сондықтан олар тағайындалған жерге өзгеріссіз және өзгеріссіз келеді. Бағдарлама құпия код әсерін қайтарады uencode, түпнұсқа екілік файлды қайта жасау. uuencode / decode екілік (және әсіресе қысылған) файлдарды электрондық пошта арқылы жіберу және жіберу үшін танымал болды Usenet жаңалықтар топтары және т.б.

Ол қазір көп жағдайда ауыстырылды MIME және yEnc. MIME көмегімен кодталған файлдар орнына жіберіледі 64 кодтау.

Кодталған формат

Кодталған файл пішіннің тақырыптық жолынан басталады:

<режим> <файл> <жаңа желі> бастаңыз

<mode> файлдікі Unix файлына рұқсат үш сегіздік сан түрінде (мысалы, 644, 744). Бұл әдетте маңызды уникс тәрізді операциялық жүйелер.

<file> - бұл екілік деректерді қайта құру кезінде қолданылатын файл атауы.

<newline> білдіреді жаңа сызық әр жолды тоқтату үшін қолданылатын таңба.

Әрбір деректер жолында келесі формат қолданылады:

<length character><formatted characters><newline>

<length character> - бұл осы жолда кодталған мәліметтер байттарының санын көрсететін таңба. Бұл ASCII тек а-ны қоспағанда, нақты байт санына 32 қосу арқылы анықталған таңба үлкен екпін «» «(ASCII коды 96) нөлдік байтты білдіреді. Соңғы мәліметтерден басқа барлық деректер жолдарында (егер мәліметтер ұзындығы 45-ке бөлінбейтін болса) 45 байт кодталған мәліметтер болады (кодталғаннан кейін 60 таңба). Демек, ұзындық мәндерінің басым көпшілігі 'M', (32 + 45 = ASCII коды 77 немесе «M»).

<formatted characters> кодталған таңбалар. Іске асыру туралы толығырақ ақпарат алу үшін пішімдеу механизмін қараңыз.

Файл екі жолмен аяқталады:

`<жаңа желі> соңы <жаңа желі>

Екіншіден соңғы жолға нөлдік байтты білдіретін ауыр екпінмен сызық ұзындығын көрсететін таңба да жатады.

Толық файл ретінде cat.txt деп аталатын қарапайым мәтіндік файлға арналған кодталған нәтиже, тек таңбалардан тұрады Мысық болар еді

644 cat.txt # 0V% T`end басталады

Бастау сызығы - стандартты uencode тақырыбы; '#' оның сызығы үш символды кодтайтынын көрсетеді; барлық екі кодталған файлдардың соңында соңғы екі жол пайда болады.

Пішімдеу механизмі

Механизмі uuencoding әр 3 байт үшін мынаны қайталайды, оларды 4 баспаға шығатын таңбаларға кодтайды, әр таңбаны а radix-64 сандық цифр:

  1. 3-тен бастаңыз байт көзден, 24 биттер жалпы алғанда.
  2. 4-ке бөлу 6-бит әрқайсысы 0-ден 63-ке дейінгі мәнді білдіретін топтар: биттер (00-05), (06-11), (12-17) және (18-23).
  3. Әрбір мәнге 32 қосыңыз. 32 қосқанда бұл мүмкін нәтижелер 32 («» аралығында болуы мүмкін дегенді білдіреді ғарыш ) және 95 («_» астын сызу ). 96 ("`" үлкен екпін ) өйткені «ерекше таңба» осы диапазонның логикалық жалғасы болып табылады.
  4. Осы сандардың ASCII эквивалентін шығарыңыз.

Егер қайнар көздің ұзындығы 3-ке бөлінбесе, онда соңғы 4 байтты бөлім болады төсеу оны таза бөлуге болатын байт. Бұл байттар жолдан алынады <length character> декодер файлға қажет емес таңбаларды қоспауы үшін.

кодтау Жоғарыда айтылғандарға керісінше, әр таңбаның ASCII кодынан 32-ні алып тастап, 6 биттік мәнді ал, 4 битті 4 битпен біріктіріп, 24 бит ал, содан кейін 3 байт шығар.

Кодтау процесі осы кестеде көрсетілген, ол жоғарыда келтірілген «Мысық» кодтауының туындысын көрсетеді.

Түпнұсқа кейіпкерлерCат
Түпнұсқа ASCII, ондық бөлшек6797116
ASCII, екілік010000110110000101110100
Жаңа ондық мәндер1654552
+3248863784
Uuencoded таңбалары0V%Т

uuencode кестесі

Келесі кестеде түрлендіру процесінде алынған 6 биттік өрістердің ондық мәнінің түрлендіруі көрсетілген және оларға сәйкес келеді ASCII таңбаны шығару коды және таңба.

96 («» «екенін ескеріңіз үлкен екпін ) - uuencoded файлдарда кездесетін, бірақ әдетте 0 соңынан тұратын жолды, әдетте файлдың соңында ғана қолданылатын таңба. Бұл нақты түрлендірілген деректерде ешқашан пайда болмайды, өйткені ол 32 мен 95 аралығынан тыс. Мұның жалғыз ерекшелігі - кейбір кодтау бағдарламалары кеңістіктің орнына толтырғыш байттарды белгілеу үшін ауыр екпінді пайдаланады. Алайда, байтты толтыру үшін қолданылатын таңба стандартталмаған, сондықтан да мүмкін.

алты
биттер
ASCII
код
ASCII
char
алты
биттер
ASCII
код
ASCII
char
алты
биттер
ASCII
код
ASCII
char
алты
биттер
ASCII
код
ASCII
char
алты
биттер
ASCII
код
ASCII
char
алты
биттер
ASCII
код
ASCII
char
алты
биттер
ASCII
код
ASCII
char
0032СП 1042* 20524 3062> 4072H 5082R 6092\
0133! 1143+ 21535 3163? 4173Мен 5183S 6193]
0234" 1244, 22546 3264@ 4274Дж 5284Т 6294^
0335# 1345- 23557 3365A 4375Қ 5385U 6395_
0436$ 1446. 24568 3466B 4476L 5486V
0537% 1547/ 25579 3567C 4577М 5587W
0638& 16480 2658: 3668Д. 4678N 5688X
0739' 17491 2759; 3769E 4779O 5789Y
0840( 18502 2860< 3870F 4880P 5890З
0941) 19513 2961= 3971G 4981Q 5991[

Мысал

Төменде бір жолды мәтіндік файлды кодтауға мысал келтірілген. Бұл мысалда, % 0D үшін байтты ұсыну болып табылады арбаны қайтару (CR), және % 0A үшін байтты ұсыну болып табылады желілік берілім (LF).

файл
Файл атауы = wikipedia-url.txtFile мазмұны = http: //www.wikipedia.org%0D%0A
uuencoding
begin 644 wikipedia-url.txt :: '1T <# HO + W = W = RYW: 6MI <& 5D: 6 $ N; W) G # 0H``end

Шанышқылар (файл, ресурс)

Unix-те дәстүрлі түрде жалғыз бар шанышқы онда файлдық деректер сақталады. Алайда кейбір файлдық жүйелер бір файлмен байланысты бірнеше шанышқыны қолдайды. Мысалы, классикалық Mac OS HFS деректер ашасы мен а ресурстық шанышқы. Mac OS HFS + Microsoft Windows сияқты бірнеше шанышқыны қолдайды NTFS мәліметтердің ауыспалы ағындары. Уукодтау құралдарының көпшілігі кодтау / декодтау кезінде ақпараттың жоғалуына алып келуі мүмкін бастапқы деректер шоғырындағы мәліметтерді ғана қолданады (мысалы, Windows NTFS файлының түсініктемелері басқа шанышқыларда сақталады.) Кейбір құралдар (мысалы, классикалық Mac OS қосымшасы) UUTool ) әр түрлі шанышқыларды бір файлға біріктіру және оларды файл атауы бойынша ажырату арқылы мәселені шешті.

Xxencode, Base64 және Ascii85 қатынастары

Таңбалардың шектеулі диапазонына қарамастан, кейде кодталған деректер ASCII емес таңбалар жиынтығын қолданып, белгілі бір компьютерлер арқылы өту кезінде бұзылады. EBCDIC. Мәселені шешудің бір әрекеті тек әріптік-цифрлық таңбалар мен плюс пен минус таңбаларын қолданатын xxencode форматы болды. Қазіргі уақытта кең таралған - сол тұжырымдамаға негізделген Base64 форматы әріптік-цифрлық - тек ASCII 32-95-тен айырмашылығы. Барлық үш формат 6 битті (64 түрлі таңба) өздерінің мәліметтерін ұсыну үшін пайдаланады.

Base64-ті uuencode бағдарламасы құра алады және формат бойынша ұқсас, тек нақты таңбалар аудармасын қоспағанда:

Тақырып өзгертілді

begin-base64 <режим> <файл>

тіркеме айналады

====

және арасындағы сызықтар таңдалған таңбалармен кодталады

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 + /

Тағы бір балама 85, төрт ASCII символында төрт екілік таңбаны кодтайды. Ascii85 жылы қолданылады PostScript және PDF форматтар.

Кемшіліктері

uuencoding алдын-ала форматталған 3 уақытты алады байт және оларды 4-ке айналдырады, сонымен қатар бас / аяқтау тегтерін, файл атауын және қосады бөлгіштер. Бұл дереккөзге қарағанда кем дегенде 33% деректерді қосады, бірақ файлды кодтаудың алдында оны қысу арқылы кем дегенде біршама өтеуге болады.

Python-дағы қолдау

The Python «uu» кодекімен кодектер модулінің көмегімен кодтауды қолдайды:

Python 2 үшін (ескірген / 2020 жылдың 1 қаңтарындағы күн батуы):

$ python -c 'мысық «.encode (» uu «)» басып шығарыңыз'666 <деректер> басталады#0V% TСоңы$

Python 3 үшін онда кодектер модулін импорттау және тікелей пайдалану қажет:

$ python3 -c «кодектерден кодты импорттайды; басып шығару (кодтау (b'Cat ',' uu '))»b666   n # 0V% T  n  nend  n 'басталады$

Perl-дегі қолдау

The Перл pack () және pack () операторларының көмегімен uuencoding-ті «u» форматты жолымен қолдайды:

$ perl -e 'баспа бумасы («u», «Cat»)'#0V% T

Басс64 көмегімен декодтауды таңбаларды аудару арқылы да жүзеге асыруға болады:

$ perl -e '$ a = «Q2F0»; $ a = ~ tr # A-Za-z0-9 + / .  _ ## cd; # базалық емес белгілерді алып тастаңыз> $ a = ~ tr # A-Za-z0-9 + / # -_ #; # жиынтықтарды аудару> буманы басып шығару («u», бума («C», 32 + int (ұзындық ($ 1) * 6/8)). $ 1) while ($ a = ~ s / (. {60} |. +) //) ; 'Мысық

Сондай-ақ қараңыз

Әдебиеттер тізімі

  1. ^ Хортон, Марк. «UUENCODE (1C) UNIX бағдарламашысының нұсқаулығы». www.tuhs.org. Алынған 2020-11-10.

Сыртқы сілтемелер

  • uencode POSIX.1-2008-ге енгізу, http://pubs.opengroup.org/onlinepubs/9699919799/utilities/uuencode.html
  • GNU-шарутилдер - GNU / Linux-те қолданылатын shar / unshar / uuencode / uudecode утилиталарының ашық бастапқы жиынтығы
  • Қарау - Unix / Windows / DOS үшін Base64, BinHex, uuencode, xxencode және т.б. кодтауға / декодтауға арналған ашық бастапқы бағдарлама.
  • UUENCODE-UUDECODE - Clem «Grandad» Dye жасаған кодтау / декодтау үшін ашық бастапқы бағдарлама
  • СТУ - Macintosh үшін ашық UUDecoder ашық көзі Стюарт Чешир
  • UUENCODE-UUDECODE - UUEncoder және UUDecoder on-line режимінде ақысыз
  • Java UUDecoder Uuencoded (пошта) қосымшаларын декодтауға арналған Java ашық кітапханасы