Русская версия 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 в KOI-8. И получилось: 'Дмюом нмтчймачпщ'. Понять что-либо уже так просто стало невозможно.
Ну, а если на пути письма попалось несколько перекодирующих почтовых серверов, и оно было перекодировано не один раз, то дешифрация такого письма становится крайне сложной задачей.
Вложенные файлы
Изначально система электронной почты предназначалась для обмена исключительно текстовыми сообщениями и не могла пересылать файлы, приложенные к письмам, так как последние обычно являлись архивами и представляли собой двоичные данные, то есть не раскладывающиеся на удобовразумительную последовательность символов.
Безусловно, можно было принудительно разбить последовательность бит в файле на группы из восьми бит и попытаться перевести его в текст (эксперимент может проделать каждый, переименовав какой-либо исполняемый файл или архив в файл с расширением'.txt' и загрузив его в Microsoft Word 97 или Microsoft Word 6.0), но в этом случае в таком тексте было бы большое количество символов с кодами меньше 33 и больше 127, из которых со вторыми могла бы возникнуть проблема обрезания старшего бита в семибитных почтовых серверах, описанная выше, а первые могли очень своеобразно отобразиться в почтовой программе. Кроме того, символы с кодами, большими 127, имели шанс подвергнуться перекодировке в российских почтовых серверах. Ясно, что после подобных преобразований вряд ли пересылаемая программа бы заработала, а архив открылся — их код стал бы практически невосстановимо испорченным.
Поэтому были разработаны специальные системы вложений двоичных файлов в почтовые сообщения, основанные на конвертации двоичных данных в набор символов с кодами от 33 до 127, могущий быть впоследствии подвергнутым обратному преобразованию в исходные двоичные данные. Систем такой конвертации было разработано несколько, самые употребительные из них — uuencode, base64, quoted- printable.
Почтовая программа, умеющая работать с вложениями, конвертировала перед отправкой письма вложенные файлы в одну из таких кодировочных систем, помещая перед вложением соответствующее указание на такую конвертацию, а при получении письма с вложениями просматривала текст письма и при нахождении вставки фрагмента, закодированного как, например, uuencode или base64 (что определялось по специальному указателю в тексте письма), превращала этот фрагмент в исходный двоичный файл. Сейчас все общеупотребительные почтовые программы умеют это делать.
Вот, к примеру, фрагмент письма с вложением, просматриваемый с помощью функции Microsoft Outlook Express 'Свойства-Подробности-Исходное сообщение' (рис. 13.8).
Рис. 13.8.
Все как на ладони. Указано, что приложено к письму — архив Zip с названием 999.zip, указан способ конвертации вложения — base64, а дальше идет набор символов первой половины кодовой таблицы, за который можно быть уверенным, что он пройдет через любые почтовые серверы неизмененным. Outlook Express при получении такого письма распознает наличие вставки base64, отобразит вложенный файл на панели вложений и позволит сохранить его на жесткий диск или прочитать, подвергнув обратному преобразованию из base64.
Если вложенный файл является текстовым (наиболее частый случай — HTML-вариант письма, который может быть составлен, к примеру, с помощью программы Outlook Express), то для него, помимо способа конвертации (обычно quoted-printable), указывается еще и кодировка исходного текстового файла для того, чтобы почтовая программа получателя, раскодировав его, могла его правильно отобразить (рис. 13.9).
Рис. 13.9.
Иногда встречаются семибитные сервера, которые не 'обрезают восьмой бит', а попросту обнуляют все символы с кодами, большими 127. В этом случае пришедшее письмо выглядит как набор вопросительных знаков, и никакая перекодировка не помогает — информация об исходных кодах символов оказывается полностью потерянной. В этом случае использование системы конвертации вложений для самого текста письма позволит ему проходить и по таким почтовым серверам.
Решение проблем
В связи с наличием пяти различных кодовых страниц для русского языка возникает две проблемы:
Для решения этих проблем есть много способов, реализуемых с помощью специальных программ или компонентов программных пакетов. Ниже будет рассказано о некоторых из них.
Да-да, не удивляйтесь — как ни странно, в этом редакторе есть средство открытия файлов в другой кодировке! Правда, поддерживается только возможность открытия и сохранения файлов в кодировке MS- DOS, но и это немаловажно — именно в этой кодировке распространяется большинство книг в 'электронных библиотеках', огромное количество документов подготовлено в редакторах под MS-DOS и сохранено в текстовом формате в кодировке MS-DOS. Как же использовать это средство?
Для начала в меню Сервис-Параметры-Общие надо поставить флажок в графе 'Подтверждать преобразование при открытии'. После этого при открытии с помощью диалогового окна «Открыть» любых