yEnc — популярная схема кодирования двоичных файлов в текстовые, применяемая преимущественно пользователями Usenet. Также используется при отправке больших двоичных файлов по электронной почте. По сравнению с другими схемами кодирования двоичных данных в текстовые, более эффективна за счёт того, что использует не только символы из 7-битной таблицы ASCII, но и часть символов из расширенной таблицы ASCII. За счёт этого размер файлов, закодированных при помощи yEnc, превышает размер исходных всего на 1-2 %[1]. Это — существенное преимущество по сравнению с 33 %-40 % дополнительного объёма для шестибитных методов кодирования, таких как uuencode и Base64. Первая версия yEnc была выпущена Jürgen Helbing в начале 2001. К 2003 yEnc получил широкое распространение, став стал стандартом де-факто для кодирования двоичных файлов в Usenet'е.[2] Название yEncode — игра слов от «Why encode?» («Зачем кодировать?»), — шутка, возникшая в связи с тем, что основной идеей yEnc было то, что кодировать нужно только те символы двоичного файла, для которых это безоговорочно требовалось, чтобы поместить их в текст письма, соответствующий техническим стандартам RFC.[3]

Ещё одним достоинством yEnc по сравнению uuencode, Base64 и другими предшествующими техниками, является код CRC, позволяющий проверить, что исходный файл корректно собран и восстановлен из отдельных фрагментов, переданных по почте.

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

В соответствии с RFC 822 и RFC 2822, сообщения электронной почты Usenet должны содержать только символы 7-битной кодовой таблицы ASCII. Однако на практике это ограничение давно не соблюдается и абсолютное большинство современного программного обеспечения штатно передаёт 8-битные символы в теле писем. С точки зрения yEnc из 256 возможных двоичных символов 252 могут быть переданы внутри письма в виде единичного байта, вне зависимости от того, отображается этот символ на экране компьютера или нет. Символы NUL, LF, CR, и = (знак равенства) кодируются специальным образом. Для LF и CR причина сделанного исключения состоит в том, что эти символы внутри письма, с точки зрения RFC, имеют специальный смысл. NUL — в связи со сложностями обработки строк, содержащих внутри себя этот символ в некоторых языках программирования и из соображений оптимизации алгоритмов обработки yEnc.Символ = используется в качестве Escape-символа.

Проблемы и критика

Ряд критиков указывал на слабые места yEnc.[4][5][6][7]

Они указывали, в частности, что yEnc страдает теми же изъянами более распространённого uuencode, которые давным-давно были решены в почтовом стандарте MIME. Например, yEnc требует, чтобы строки «=ybegin» и «=yend» были помещены в текст письма, ограничивая передаваемый в этом письме фрагмент двоичного файла.[3]

В результате этого возможно ложное срабатывание сборщика файлов, который будет анализировать текст письма и обнаружит там подобную строку, которая упомянута в процессе обсуждения самого yEnc в переписке. Это — небольшой недостаток, более серьёзным является то, что yEnc кодирует номера файлов в строке темы письма, которая является ненадёжным способом передачи информации и может быть искажена. В результате сборка двоичного файла произойдёт с ошибкой.

Критика так же касалась отсутствия формального стандарта, описывающего yEnc.

Среди предложений о доработке yEnc также звучала идея интегрировать уEnc в MIME, что, по всей видимости, избавило бы yEnc от большинства приписываемых этой технике кодирования недостатков. Однако, никаких практических шагов по реализации своих идей критики yEnc так и не предприняли, поэтому yEnc продолжает сейчас применяться в том виде, в каком он был определён автором технологии.

Стандартизация и поддержка в программном обеспечении

yEnc никогда не предлагался IETF в качестве технического стандарта. Домашняя страница yEnc содержит неформальную спецификацию технологии, а также ряд дополнительных технических замечаний.

yEnc напрямую поддерживается программой чтения новостей Usenet Forte Agent. Так же существует ряд утилит других производителей, которые позволяют использовать yEnc в сочетании с другими программами чтения почты и новостей.

Для программ Outlook Express, Windows Mail и Windows Live Mail существуют плагины независимых производителей, позволяющих использовать эту технологию. Mozilla Thunderbird поддерживает yEnc с ограничениями. Этот почтовый клиент не может раскодировать файлы, разбитые на несколько писем.[8]

Примечания

См. также

Ссылки