Введение

Схема кодирования для передачи файлов

yEnc — это схема кодирования из двоичного формата в текстовый для передачи двоичных файлов в сообщениях Usenet или по электронной почте. Она снижает накладные расходы по сравнению с предыдущими методами кодирования на основе US ASCII, используя 8-битный метод кодирования. Накладные расходы yEnc часто (если каждое значение байта встречается примерно с одинаковой частотой в среднем) составляют всего 1–2%, по сравнению с 33–40% для 6-битных методов кодирования, таких как uuencode и Base64. yEnc был первоначально разработан Юргеном Хелбингом, а его первый релиз состоялся в начале 2001 года. К 2003 году yEnc стал фактическим стандартом кодирования для двоичных файлов в Usenet. Название yEncode — это игра слов на тему «Зачем кодировать?», поскольку идея заключается в кодировании символов только в том случае, если это абсолютно необходимо для соответствия стандарту формата сообщения.

Как работает yEnc

Тела сообщений Usenet и электронной почты изначально предназначались для содержания только символов ASCII (или). Большинство конкурирующих кодировок представляют двоичные файлы, преобразуя их в печатаемые символы ASCII, поскольку диапазон печатаемых символов ASCII поддерживается большинством операционных систем. Однако, поскольку это значительно уменьшает доступный набор символов, возникает значительная избыточность (потеря пропускной способности) в 8-битных байтовых сетях. Например, в uuencode и Base64 три байта данных кодируются в четыре печатаемых символа ASCII, что эквивалентно четырем байтам, то есть 33% избыточности (не считая избыточности заголовков). yEnc использует один символ (один байт) для представления одного байта файла, за небольшим исключением. yEnc исходит из предположения, что двоичные данные в основном могут передаваться через Usenet и электронную почту. Поэтому 252 из 256 возможных байтов передаются без кодирования в виде одного байта, независимо от того, является ли результат печатаемым символом ASCII или нет. Только NUL, LF, CR и = подвергаются экранированию. LF и CR экранируются, поскольку RFC, определяющие интернет-сообщения, по-прежнему требуют, чтобы возврат каретки и перевод строки имели специальное значение в почтовом сообщении. Символ = является escape-символом, поэтому он сам экранируется. NUL также экранируется из-за проблем с обработкой нулевых символов в распространенном коде, хотя в качестве оптимизации yEnc добавляет 42 к каждому исходному байту, чтобы, что не редкость, длинные последовательности нулевых байтов не требовали большого количества экранирования. Не существует RFC или другого стандартного документа, описывающего yEnc. На главной странице yEnc содержится спецификация и грамматика. На главной странице yEnc утверждается, что "все основные программы для чтения новостей были расширены для поддержки yEnc". Microsoft Outlook Express, Windows Mail и Windows Live Mail не предоставляют поддержку yEnc ни для новостей, ни для почты, но доступны плагины. Mozilla Thunderbird декодирует однокомпонентные файлы yEnc, но не может объединять многокомпонентные двоичные файлы.

Проблемы

Многие программисты и администраторы новостных групп отмечали недостатки yEnc. Он страдает от многих тех же проблем, что и uuencode, причем некоторые из них были решены еще за годы до появления MIME (которая устраняла те же недостатки в uuencode). Например, yEnc требует, чтобы строки "=ybegin" и "=yend" окружали закодированный файл в теле сообщения. Эталонный кодировщик и декодировщик были включены в бесплатную версию MyNews 1.9 в ноябре того же года. yDec, бесплатный декодировщик для Win32, появился 14 ноября 2001 года. 21 марта 2002 года Agent добавил поддержку yEnc в версии 1.91. По отзывам Юргена Хельбинга выпуск был отложен на неделю. Спустя несколько дней после релиза Юрген Хельбинг написал, что Forté реализовал поддержку yEnc наилучшим образом. Stuffit Deluxe добавил поддержку yEnc в версии 8.0 в 2003 году. PowerArchiver 9.2 добавил поддержку yEnc в мае 2005 года.