Uuencode и uudecode онлайн
Вставьте текст или байты в hex, чтобы закодировать их в uuencode — со строками begin и end или без них, — либо переключитесь на декодирование и вставьте блок uuencode из старого письма, сообщения Usenet или shell-архива, чтобы получить содержимое.
Работает в браузере: всё, что вы вводите, никуда не отправляется.
Как пользоваться
- Выберите Кодировать или Декодировать.
- Кодирование: введите текст или выберите «Байты как: Hex» и вставьте hex. Оставьте строки begin/end для полного блока (begin 644 file.txt … end) или выключите их, чтобы получить только строки данных.
- Декодирование: вставьте блок. Текст до begin и после end игнорируется, так что можно вставить письмо целиком.
Как это работает
Каждая группа из 3 байтов (24 бита) делится на четыре 6-битных значения. Значение v записывается символом с кодом 32 + v, только 0 записывается обратным апострофом `. Строка начинается с символа длины (32 + число байтов) и содержит не больше 45 байтов, то есть 60 символов данных. Неполная последняя группа дополняется нулевыми байтами; символ длины подсказывает декодеру, сколько байтов настоящие.
Пример
Текст Cat — это байты 43 61 74:
- в битах: 010000 110110 000101 110100 = 16, 54, 5, 52;
- плюс 32: 48, 86, 37, 84 = 0 V % T;
- в строке 3 байта, поэтому она начинается с 32 + 3 = 35 = #.
Полный блок:
begin 644 file.txt
#0V%T
`
end
Советы
- Если декодирование не удаётся, проверьте, что блок не переформатировали: каждая строка должна начинаться со своего символа длины.
- 644 в строке begin — права доступа к файлу в Unix; здесь они и имя файла при декодировании игнорируются.
- Русский текст в UTF-8 занимает по 2 байта на букву, поэтому блок для него вдвое длиннее, чем для латиницы.
Частые вопросы
Что такое uuencode?
Кодировка Unix-to-Unix — способ передать двоичный файл по каналу, который пропускает только текст, например по ранней электронной почте и Usenet. Каждые 3 байта превращаются в 4 печатных символа, в строке до 45 байтов, а блок обрамлён строкой begin (права доступа и имя файла) и строкой end.
Почему в одних файлах uuencode пробелы, а в других обратные апострофы?
Сначала значение 0 записывали пробелом (код 32). Почтовые системы часто срезали пробелы в конце строк, поэтому более поздние кодировщики, включая GNU sharutils, пишут вместо него обратный апостроф `. Декодер понимает оба: он берёт код символа минус 32 и оставляет младшие 6 бит.
Что означает первый символ строки?
Число байтов в строке плюс 32. M означает 45 байтов (77 − 32) — обычная полная строка; последняя, короткая строка начинается с другой буквы, а перед end стоит строка из одного ` (ноль байтов).
Декодируются ли блоки begin-base64?
Нет. uuencode -m записывает внутри begin-base64 … ==== обычный Base64, поэтому тело такого блока нужно декодировать декодером Base64.