Интернет-журнал 'Домашняя лаборатория', 2007 №3 - Мёрфи
Шрифт:
Интервал:
Закладка:
Новая кодировка была названа KOI-8. Так как системы на основе Unix были в основном рассчитаны на работу с электронной почтой и международными сетями, то она стала стандартом для этой системы. Количество семибитных серверов стало понемногу сокращаться, сейчас их уже почти совсем не осталось в мире, а кодировка уже стала общепринятой, и программы для Unix предназначены для работы именно с ней.
KOI-8 использовалась не только Unix-системами. Так, любой пользователь персонального компьютера под управлением MS-DOS или Windows, имеющий выход к электронной почте, должен был иметь у себя программу для получения и отправки сообщений, умеющую работать с KOI-8. Выход к системе электронной почты был возможен и с компьютеров фирмы Apple — с Макинтошей, однако в операционных системах для этих компьютеров использовалась своя, оригинальная русская кодировка символов, отличающаяся от всех остальных. Для того, чтобы облегчить переписку между пользователями разных типов компьютеров и операционных систем, KOI-8 была принята как универсальная кодировка, и любая почтовая программа была обязана уметь читать и отправлять сообщения в этой кодировке.
Слишком умные серверы
Наличие пяти различных кодировок для русского языка создало определенные проблемы. Прежде всего, возникла необходимость в специальных программах-перекодировщиках, о которых речь пойдет ниже. Но самая большая проблема оказалась в российских почтовых серверах.
Казалось бы, а в чем она могла заключаться? Главное, чтобы серверы могли обрабатывать сообщения в восьмибитных кодировках, и тогда в какой бы кодировке сообщения не пересылались, они всегда могли бы быть прочитаны принимающей стороной с помощью программы, умеющей работать с этой кодировкой. Но, увы, не все оказалось таким простым… В некоторые почтовые серверы их создатели вложили возможность автоматической перекодировки поступающих сообщений — возможно, для некоей "стандартизации": глупый пользователь, ничего не понимающий в компьютерах, написал и отправил письмо в кодировке Windows-1251, - так надо его письмо перевести в KOI-8, чтобы было, как у нормальных людей, никогда не использующих Windows! Хотя, может быть, у создателей перекодирующих серверов были и иные соображения.
Если на такой перекодирующий сервер поступит сообщение в кодировке Windows-1251, и он его воспримет именно как сообщение в этой кодировке, то письмо преспокойно будет перекодировано в KОI-8 и отправлено дальше. О том, в какой кодировке написано письмо, всегда указывается в его заголовке или тексте. Просмотреть текст сообщения именно в том виде, в каком сообщение передается почтовыми серверами (то есть со всей служебной информацией) можно в любой почтовой программе. Например, в Microsoft Outlook Express 5.0 это можно сделать, щелкнув правой кнопкой мыши на письме, выбрав из контекстного меню пункт "Свойства", а в появившемся окне — вкладку "Подробности". Тогда можно будет просмотреть заголовок сообщения. Нажав на кнопку "Исходное сообщение", вы увидите текст письма так, как он передается по Сети. Кодировка письма указывается в заголовке сообщения (рис. 13.7).
Рис. 13.7. Указание на кодировку письма в заголовке сообщения.
Русская версия Microsoft Outlook Express 5.0 по умолчанию для всех отправляемых сообщений ставит кодировку KOI-8 и сообщения отправляет именно в этой кодировке. Однако некоторые почтовые программы могут делать ошибки — письмо написано, например, в KOI-8, а программа пишет в заголовке письма, в служебной информации, что письмо имеет кодировку Windows-1251. Если такое письмо будет отправлено адресату, то оно сразу не сможет правильно отобразиться в его почтовой программе — на экране будет мешанина символов вроде той, что помещена в заголовке этой главы. Поскольку почти все почтовые программы позволяют просматривать одно и то же письмо в различных кодировках, то получатель письмо прочитать все же сможет, просто выбрав для него правильную кодировку.
Но если такое письмо — с несоответствующим содержанию заголовком — попадет на перекодирующий почтовый сервер, то ситуация резко осложнится. Посмотрев на заголовок письма, сервер решит, что, раз оно написано в Windows-1251, как там указано, то оно должно быть перекодировано в стандартную для Сети (по мнению сервера и его создателей) кодировку KOI-8. К письму будет применено преобразование Windows-1251 — KOI-8: будут заменены соответствующие коды символов.
Но письмо-то уже изначально было в KOI-8! И что получается? Автор письма написал в нем "Добро пожаловать". В KOI-8 оно перекодировалось как "дНАПН ОНФЮКНБЮРЭ". А сервер эту фразу снова перекодировал по тем же законам, что и любая перекодировка из Windows-1251 в KОI-8. И получилось: "Дмюом нмтчймачпщ". Понять что-либо уже так просто стало невозможно.
Ну, а если на пути письма попалось несколько перекодирующих почтовых серверов, и оно было перекодировано не один раз, то дешифрация такого письма становится крайне сложной задачей.
Вложенные файлы
Изначально система электронной почты предназначалась для обмена исключительно текстовыми сообщениями и не могла пересылать файлы, приложенные к письмам, так как последние обычно являлись архивами и представляли собой двоичные данные, то есть не раскладывающиеся на удобовразумительную последовательность символов.
Безусловно, можно было принудительно разбить последовательность бит в файле на группы из восьми бит и попытаться перевести его в текст (эксперимент может проделать каждый, переименовав какой-либо исполняемый файл или архив в файл с расширением" . txt" и загрузив его в Microsoft Word 97 или Microsoft Word 6.0), но в этом случае в таком тексте было бы большое количество символов с кодами меньше 33 и больше 127, из которых со вторыми могла бы возникнуть проблема обрезания старшего бита в семибитных почтовых серверах, описанная выше, а первые могли очень своеобразно отобразиться в почтовой программе. Кроме того, символы с кодами, большими 127, имели шанс подвергнуться перекодировке в российских почтовых серверах. Ясно, что после подобных преобразований вряд ли пересылаемая программа бы заработала, а архив открылся — их код стал бы практически невосстановимо испорченным.
Поэтому были разработаны специальные системы вложений двоичных файлов в почтовые сообщения, основанные на конвертации двоичных данных в набор символов с кодами от 33 до 127, могущий быть впоследствии подвергнутым обратному преобразованию в исходные двоичные данные. Систем такой конвертации было разработано несколько, самые употребительные из них — uuencode, base64, quoted-printable.
Почтовая программа, умеющая работать с вложениями, конвертировала перед отправкой письма вложенные файлы в одну из таких кодировочных систем, помещая перед вложением соответствующее указание на такую конвертацию, а при получении письма с вложениями просматривала текст письма и при нахождении вставки фрагмента, закодированного как, например, uuencode или base64 (что определялось по специальному указателю в тексте письма), превращала этот фрагмент в исходный двоичный файл. Сейчас все общеупотребительные почтовые программы умеют это делать.
Вот, к примеру, фрагмент письма с вложением, просматриваемый с помощью