Uuencode

История

Эти две программы были написаны до массового использования Интернета, чтобы, в частности, программный пакет uucp мог надежно передавать двоичные файлы. Этот программный пакет обеспечивает межсерверную связь через модем и изначально был разработан для обмена простым текстом (с использованием только части из 128 символов ASCII ).

Они в основном использовались для передачи сообщений ( электронная почта и форумы Usenet ), но сегодня их использование в значительной степени заменено расширениями MIME и, в частности, кодировкой base64 (которая использует более переносимый набор символов в закодированном потоке).

Кодированный формат

Файл с кодировкой uuencoded начинается со строки заголовка в форме:

begin <mode> <file><newline>

— это к файлу виде трех восьмеричных цифр (например, 644, 744)

Обычно это важно только для unix-подобных операционных систем.. — это имя файла, которое будет использоваться при воссоздании двоичных данных.

<файл> — это имя файла, которое будет использоваться при воссоздании двоичных данных.

<новая строка > обозначает символ новой строки , используемый для завершения каждой строки.

Каждая строка данных использует формат:

<length character><formatted characters><newline>

<символ длины> — это символ, указывающий количество байтов данных, которые были закодированы в этой строке. Это ASCII- символ, определяемый добавлением 32 к фактическому счетчику байтов, за единственным исключением серьезного акцента «» «(код ASCII 96), обозначающего ноль байтов. Все строки данных, кроме последней (если длина данных не делится на 45), содержат 45 байтов закодированных данных (60 символов после кодирования). Следовательно, подавляющее большинство значений длины — это «M» (32 + 45 = код ASCII 77 или «M»).

<форматированные символы> — это закодированные символы. См. «Механизм форматирования» для получения более подробной информации о фактической реализации.

Файл заканчивается двумя строчками:

`<newline>
end<newline>

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

В качестве полного файла вывод uuencoded для простого текстового файла с именем cat.txt, содержащего только символы Cat , будет

begin 644 cat.txt
#0V%T
`
end

Начальная строка — это стандартный заголовок uuencode; ‘#’ указывает, что его строка кодирует три символа; последние две строки появляются в конце всех файлов с кодировкой uuencoded.

Внешние ссылки [ править ]

Использование внешних ссылок в этом разделе может не соответствовать политикам или рекомендациям Википедии . Пожалуйста, улучшите эту статью , удалив лишние или неприемлемые внешние ссылки и преобразовав полезные ссылки, где это уместно, в сноски . ( Март 2020 г. ) ( Узнайте, как и когда удалить этот шаблон сообщения )
  • Запись uuencode в POSIX.1-2008, http://pubs.opengroup.org/onlinepubs/9699919799/utilities/uuencode.html
  • GNU-sharutils — набор утилит shar / unshar / uuencode / uudecode с открытым исходным кодом, используемых в Linux
  • UUDeview — программа с открытым исходным кодом для кодирования / декодирования Base64, BinHex, uuencode, xxencode и т. Д. Для Unix / Windows / DOS
  • UUENCODE-UUDECODE — программа с открытым исходным кодом для кодирования / декодирования, созданная Клемом «Дедушка» Красителем.
  • StUU — быстрый UUDecoder с открытым исходным кодом для Macintosh от Стюарта Чешира
  • UUENCODE-UUDECODE — Бесплатный онлайн-код UUEncoder и UUDecoder
  • Java UUDecoder — библиотека Java с открытым исходным кодом для декодирования вложений, закодированных в uuencoder (почта)

Принцип действия

Программа uuencode создает текстовый поток (последовательность символов ASCII ), первая строка которого:

 begin <mode> <nom>

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

 end

Между этими двумя строками можно найти только следующие 65 символов:

 es !  "  #  $  %  &  '  (  )  *  +  ,  -  .  /
 0  1  2  3  4  5  6  7  8  9  :  ;  <  =  >  ?
 @  A  B  C  D  E  F  G  H  I  J  K  L  M  N  O
 P  Q  R  S  T  U  V  W  X  Y  Z    ^  _
 `

характер отметил «повторно выше, символ ASCII , представляющий пространство и чей цифровой код 32. Других символами являются цифровыми кодами от 32 + 1 до 32 + 64.

Программа кодирования считывает исходный файл группами по три байта (возможно, завершается байтами с нулевым значением, если количество байтов, которые должны быть закодированы, не кратно 3), затем преобразует эти три байта (т.е. 24 бита ) в четыре группы 6 бит каждая, затем к каждой группе из 6 бит (которая представляет в базе 10 число от 0 до 63) добавляется значение 32, результирующее значение затем представляет собой код ASCII одного из символов, представленных выше, этот символ используется кодировщиком в выходном потоке.

Программа кодирования также добавляет в самом начале каждой созданной строки текста количество символов / байтов, закодированных в этой строке; этот счетчик (в диапазоне от 1 до 45) кодируется путем увеличения его на 32 перед преобразованием в символ ASCII, в свою очередь. Таким образом, разрешенный предел размера создаваемых строк составляет 61 символ (т.е. 1 символ для начальной длины плюс 60 символов, кодирующих 45 байтов ).

Вход в систему

Операционная система UNIX — это
многопользовательская система с
разделением времени. Начинать
сеанс работы с ней нужно с
сообщения о том, кто Вы. Это не зависит
от того, работаете Вы за терминалом
в своем кабинете или по
коммутируемой линии связываетесь с
большим узлом общего пользования. В
этом заключается одно из отличий UNIX
от DOS, Windows и Macintosh — операционных
систем, в которых понятие
«многопользовательский»
отсутствует. UNIX должна знать, кто
Вы, чтобы выделять Вас и Ваше
хозяйство среди десятков, сотен и
даже тысяч других пользователей.

Диалог при входе в UNIX примерно
такой:

ttc
ttc!login: krol
Password:
Last login: Sat Sep 7 17:16:35
ttc
%

На вопрос login вводите свое
пользовательское имя, далее
вводите, пароль, данный вам
администратором системы. После
появления % можно работать.

Пользовательское имя — это имя, с
которым связан Ваш вход в систему;
администратор системы присваивает
его, регистрируя данного
пользователя. Пароль позволяет подтвердить,
что Вы действительно тот, за кого
себя выдаете, и таким образом
предотвратить незаконный вход в
систему. Вводимый пароль не
отображается на экране, чтобы никто
его не увидел. Администратор
системы, вероятно, назначит Вам
какой-нибудь начальный пароль, а
затем расскажет, как выбрать и
поменять его.

Знак % — это приглашение,
свидетельствующее о том, что UNIX
готова к приему команд. В Вашей
системе приглашение может быть
иным, очень часто приглашение UNIX
включает имя компьютера.

В некоторых системах может
понадобиться «телефонный
пароль» при регистрации по
телефонной линии. Если такой пароль
Вам нужен, его можно получить у администратора
системы.

Кроме того, может быть задан
вопрос о типе используемого
терминала. Вид. сообщения UNIX о типе
терминала зависит от конкретной
ситуации, но обычно это выглядит
примерно так:

Last login: Sat Sep 7 17:16:35 
ttc
TERM=(vt100)?
%

Строка (vt100)? означает: «Думаю, —
Вы используете терминал VT100. Если
да, нажмите и продолжайте
работу. В противном случае сообщите
мне о типе терминала». VT100 —
удачное предположение, поскольку
большинство наиболее
распространенных коммуникационных
программных пакетов — поддерживают эмуляцию
VT100, т.е. заставят Ваш компьютер
работать как VT100. Сервер TTC
поддерживает также терминал VT100WIN
для пользователей работающих через программу telnet из Windows. Этот
тип терминала позволит вам
отображать русский текст на экране.
Поэтому при входе в систему вы
можете ответит . Если после
этот вы по-прежнему не можете
работать с русским текстом,
обратитесь к администратору
системы.

Если UNIX получит неверную
информацию о типе терминала, может
возникнуть путаница: например,
система будет неправильно
реагировать на нажатие клавиши ,
символы будут отображаться
инверсно и т.д. В случае
возникновения подобных проблем
обратитесь к администратору
системы.

Для завершения сеанса работы в UNIX
дайте команду logout или exit.

ПРИМЕРЫ

Вывести всё, кроме первых трёх строк (0x30 байтов) файла file:

Вывести три строки (0x30 байтов) от конца файла file:

Вывести 120 байтов в виде непрерывного шестнадцатеричного представления по 20 октетов в строке:

Вывести первые 120 байтов этой страницы справочника по 12 октетов в строке:

Показать дату из файла xxd.1:

Скопировать входной_файл в выходной_файл с добавлением 100 байтов со значением 0x00 в начало файла:

Заменить дату в файле xxd.1:

Создать 65537-байтный файл, все байты которого имеют значение 0x00, кроме последнего байта, который должен иметь значение ‘A’ (0x41):

Создать шестнадцатеричное представление этого файла с использованием автоматического пропуска:

Создать 1-байтный файл, содержащий символ ‘A’. Число после ‘-r -s’ добавляется к номерам строк, найденным в файле; иначе говоря, предшествующие байты пропускаются:

xxd можно использовать в качестве фильтра в редакторе, например в vim(1), чтобы создать шестнадцатеричное представление области между отметками `a’ и `z’:

Вы можете использовать xxd в качестве фильтра в редакторе, например в vim(1), для восстановления данных из шестнадцатеричного представления между отметками `a’ и `z’:

Вы можете использовать xxd в качестве фильтра в редакторе, например в vim(1), для восстановления данных из единственной строки шестнадцатеричного представления. Поместите курсор в соответствующую строку и наберите

Чтобы прочитать единственный символ из канала связи:

таблица uuencode [ править ]

В следующей таблице показано преобразование десятичного значения 6-битных полей, полученных в процессе преобразования, и соответствующий им выходной код и символ ASCII .

Обратите внимание, что 96 («» » серьезный ударение ) — это символ, который встречается в файлах с кодировкой uu, но обычно используется только для обозначения строки нулевой длины, обычно в конце файла. Это никогда не произойдет естественным образом в фактических преобразованных данных, поскольку оно находится за пределами диапазона от 32 до 95

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

шесть бит Код ASCII ASCII символ шесть бит Код ASCII ASCII символ шесть бит Код ASCII ASCII символ шесть бит Код ASCII ASCII символ шесть бит Код ASCII ASCII символ шесть бит Код ASCII ASCII символ шесть бит Код ASCII ASCII символ
00 32 SP   10 42 *   20 52 4   30 62 >   40 72 ЧАС   50 82 р   60 92 \
01 33 !   11 43 год +   21 год 53 5   31 год 63 ?   41 год 73 я   51 83 S   61 93
02 34 «   12 44 год ,   22 54 6   32 64 @   42 74 J   52 84 Т   62 94 ^
03 35 год #   13 45   23 55 7   33 65 А   43 год 75 K   53 85 U   63 95 _
04 36 $   14 46 .   24 56 8   34 66 B   44 год 76 L   54 86 V
05 37 %   15 47   25 57 9   35 год 67 C   45 77 M   55 87 W
06 38 &   16 48   26 год 58   36 68 D   46 78 N   56 88 Икс
07 39   17 49 1   27 59 ;   37 69 E   47 79 О   57 89 Y
08 40 (   18 50 2   28 год 60 <   38 70 F   48 80 п   58 90 Z
09 41 год )   19 51 3   29 61 знак равно   39 71 грамм   49 81 год Q   59 91

КЛЮЧИ ЗАПУСКА

Если входной_файл не задан, то соответствующие данные читаются из потока стандартного ввода. В случае, если в качестве входного_файла используется символ `-‘, источником данных также выступает поток стандартного ввода. В том случае, если не указан выходной_файл (или вместо него используется символ `-‘ ), результат преобразования направляется в поток стандартного вывода.

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

Параметры ключей могут быть заданы с использованием десятичного, шестнадцатеричного или восьмеричного формата. Таким образом, ключи -c8, -c 8, -c 010 и -cols 8 являются равнозначными.

-a | -autoskip

Включает автоматический пропуск: вместо последовательности нулевых строк используется одиночный символ ‘*’. По умолчанию не применяется.

-b | -bits

Вместо шестнадцатеричного кода используются биты (двоичные цифры). При использовании этого ключа вместо обычного шестнадцатеричного представления октетов используются наборы из восьми символов «1» и «0». Каждая строка предваряется номером строки в шестнадцатеричном виде, а завершается символьным представлением (в виде ascii или ebcdic). Ключи -r, -p, -i в этом режиме не работают.

-c кол | -cols кол

Задаёт количество октетов <кол>, которое выводится на каждой строке. По умолчанию используется значение 16 (-i: 12, -ps: 30, -b: 6). Максимально допустимое значение: 256.

-E | -EBCDIC

Изменяет способ кодирования символов в правой колонке с ASCII на EBCDIC. Этот ключ не изменяет шестнадцатеричное представление. Данный ключ не имеет смысла, если используются ключи -r, -p или -i.

-g байт | -groupsize байт

Позволяет выполнять группировку указанного количества <байтов> (две шестнадцатеричные цифры или восемь битов), отделяя группы друг от друга пробелами. Значение -g 0 применяется для отказа от использования группировки. По умолчанию используется значение <байт> равное 2 в обычном режиме и 1 в битовом режиме. Группировка не применяется в режимах postscript и include.

-h | -help

Выводит справку по доступным ключам командной строки и завершает работу программы. Создание шестнадцатеричного представления не выполняется.

-i | -include

Позволяет создавать вывод в стиле подключаемых заголовочных файлов языка C. Вывод содержит полноценное определение статического массива данных, имя которого соответствует имени входного файла, если xxd не считывает данные из потока стандартного ввода.

-l длина | -len длинаЗавершает работу после записи заданного в параметре <длина> количества октетов.

-p | -ps | -postscript | -plainИспользует непрерывный формат вывода шестнадцатеричного кода, известный как «простой» стиль или стиль «postscript».

-r | -revert

Изменяет смысл операции на противоположный: позволяет выполнять преобразование шестнадцатеричного представления в бинарный код (или применять результат в качестве заплаты). Если вывод происходит не в поток стандартного вывода, то xxd выполняет добавление кода к соответствующему файлу. При использовании комбинации ключей -r -p происходит чтение «простого» шестнадцатеричного представления без использования информации о номерах строк и какого-либо специального раскроя колонок. Пробелы и символы новой строки могут встречаться в любом месте исходных данных.

-seek смещение

При использовании после ключа -r : добавлять указанное <смещение> к файловым позициям, обнаруженным в исходных данных.

-s seek

Начинает работу с указанного абсолютного (или относительного) <смещения> в байтах во входном_файле. + указывает, что смещение является относительным по отношению к текущей файловой позиции в потоке стандартного ввода (бессмысленно, если чтение происходит не из потока стандартного ввода). — указывает, что должно быть прочитано указанное количество символов от конца ввода (либо, если сочетается с + : перед текущей позиции файла в потоке стандартного ввода). Если ключ -s не используется, то xxd начинает работу от текущей позиции в файле.

-u Использует шестнадцатеричные цифры в верхнем регистре. По умолчанию используются цифры в нижнем регистре символов.

-v | -version Отображает информацию о версии программы.

Вилки (файл, ресурс)

У Unix традиционно есть единственная ветвь, в которой хранятся файловые данные. Однако некоторые файловые системы поддерживают несколько вилок, связанных с одним файлом. Например, классическая HFS Mac OS поддерживает вилку данных и вилку ресурсов . Mac OS HFS + поддерживает несколько разветвлений, как и альтернативные потоки данных Microsoft Windows NTFS . Большинство инструментов uucoding обрабатывают данные только из первичного ответвления данных, что может привести к потере информации при кодировании / декодировании (например, комментарии файлов Windows NTFS хранятся в другом ответвлении). Некоторые инструменты (например, классическое приложение для Mac OS UUTool ) решили проблему, объединив разные вилки в один файл и дифференцируя их по имени файла.

Механизм форматирования

Механизм uuencoding повторяет следующее для каждых 3 байтов, кодируя их в 4 печатаемых символа, каждый символ представляет собой числовую цифру с основанием 64 :

  1. Начните с 3 байтов от источника, всего 24 бита .
  2. Разделены на 4 группы по 6 бит , каждая из которых представляет значение в диапазоне от 0 до 63: биты (00-05), (06-11), (12-17) и (18-23).
  3. Добавьте 32 к каждому из значений. С добавлением 32 это означает, что возможные результаты могут быть от 32 (пробел «») до 95 ( подчеркивание «_» ). 96 (« серьезный ударение» ) в качестве «особого символа» является логическим продолжением этого диапазона. Несмотря на то, что символ пробела задокументирован как кодировка для значения 0, реализации, такие как GNU sharutils, фактически используют символ серьезного акцента для кодирования нулей в теле файла, никогда не используя пробел.
  4. Выведите эквивалент этих чисел в формате ASCII.

Если исходная длина не делится на 3, то последний 4-байтовый раздел будет содержать байты заполнения, чтобы сделать его четко делимым. Эти байты вычитаются из строки <length character>, чтобы декодер не добавлял в файл нежелательные символы.

uudecoding является обратным вышеупомянутому, вычтите 32 из кода ASCII каждого символа ( по модулю 64 для учета использования серьезного акцента ), чтобы получить 6-битное значение, объедините 4 6-битные группы, чтобы получить 24 бита, затем выведите 3 байта.

Процесс кодирования демонстрируется этой таблицей, которая показывает происхождение вышеуказанного кодирования для «Cat».

Оригинальные персонажи
Исходный код ASCII, десятичный 67 97 116
ASCII, двоичный 1 1 1 1 1 1 1 1 1 1
Новые десятичные значения 16 54 5 52
+32 48 86 37 84
Uu закодированные символы

Отношение к xxencode, Base64 и Ascii85

Несмотря на ограниченный диапазон символов, uuencoded данные иногда повреждаются при прохождении через определенные компьютеры с использованием наборов символов, отличных от ASCII, таких как EBCDIC . Одной из попыток решить проблему был формат xxencode, в котором использовались только буквенно-цифровые символы, а также символы плюс и минус. Сегодня более распространенным является формат Base64, который основан на той же концепции только буквенно-цифровых символов в отличие от ASCII 32–95. Все три формата используют 6 бит (64 различных символа) для представления своих входных данных.

Base64 также может быть сгенерирован программой uuencode и аналогичен по формату, за исключением фактического преобразования символов:

Заголовок изменен на

begin-base64 <mode> <file>

трейлер становится

====

и строки между ними кодируются символами, выбранными из

ABCDEFGHIJKLMNOP
QRSTUVWXYZabcdef
ghijklmnopqrstuv
wxyz0123456789+/

Другой альтернативой является Ascii85 , который кодирует четыре двоичных символа пятью символами ASCII. Ascii85 используется в форматах PostScript и PDF .

Литература

Существует много книг по ОС UNIX.
Вот некоторые из них, которые могут
Вам пригодиться:

Learning the UNIX Operating System, авторы Grace
Todino, John Strang, Jerry Peek (O’Reilly & Associates).
Oороший вводный курс. Кратко и по
теме, понятно новичкам.

Life with UNIX автор Don Libes (Prentice-Hall,
1989). Еще один вводный курс, который
помог многим.

UNIX in а Nutshell (O’Reilly & Associates).
Eраткий перечень команд ОС UNIX. Есть
разные варианты этой книги для
различных версий UNIX.

Learning the Vi Editor, автор Linda Lamb (O’Reilly
& Associates); Learning Emacs, авторы Deb
Cameron и Bill Rosenblatt (O’Reilly & Associates). Aаша
работа с операционной системой не
будет продуктивной, если Вы не
сможете редактировать файлы. В
операционной системе UNIX чаще всего
используются редакторы vi и emacs. Они слишком
сложны, чтобы описывать их в этой
книге, а указанные издания — это
отличные образцы популярной
литературы.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Adblock
detector