Два препятствия...
...и два подхода
Старое не всегда плохо
Стандарт MIME: напрасны ваши совершенства
Как наладить переписку по-русски
Что делать с "подпорченным" письмом
Текст, закодированный методом UUENCODE
Текст, закодированный методом Quoted-Printable
Текст, закодированный методом Base64
Полезные адреса
Некоторые программы, корректно работающие с русскими письмами

Удивительно, но системы электронной почты (ЭП), назначение которых - облегчить общение между людьми, русифицируются гораздо медленнее и хуже, чем текстовые процессоры и офисные программы. Почему это происходит и как тут быть?

Печальная ситуация, возникающая все чаще и чаще, - по ЭП приходит письмо, а в нем вместо русского текста нечто совершенно невообразимое. Еще год-два назад это было редкостью: почти все пользователи ЭП, прибегающие в своих письмах к русскому языку, жили в России (или странах СНГ) и пользовались услугами одной и той же фирмы (Demos/Relcom) и ее же почтовыми программами. Появление в нашей стране независимых сетей (и большого числа русских адресатов за границей), а также широкое использование различных почтовых программ, по-разному интерпретирующих стандарты Internet, породило целый водопад проблем. Мы обсудим сначала их причины, а затем перейдем к возможным решениям.

Два препятствия...

При передаче письма, содержащего русский текст, по ЭП возникает два разнородных препятствия. Первое состоит в "нестандартности" русского алфавита с точки зрения стандарта ASCII. Дело в том, что этот стандарт определяет только использование кодов от 0 до 127, чего вполне достаточно для латинских букв, цифр и специальных символов, но не для русских букв: общепринятые системы представления русских текстов в компьютере требуют использования байтов с кодами в интервале от 128 до 255. Таким образом, для передачи стандартных ASCII-символов хватает семи битов, а если среди символов есть нестандартные (например, русские буквы), то требуется уже восемь битов. Старые почтовые программы могли отказаться передавать письма, содержащие восьмибитовые символы, или "срезать" (заменять нулем) старший бит каждого байта. Современные программы пытаются передавать "восьмибитовые" тексты через "семибитовую" сеть, но эти попытки (из-за неточностей и несоблюдения стандартов) часто порождают новые проблемы.

Второе препятствие - отсутствие единого метода кодирования русских букв. Единственное, что объединяет существующие способы, - это использование для русского алфавита кодов в интервале 128-255. В настоящий момент актуальны четыре кодировки:

  • "альтернативная" (OEM, 866), принятая в MS-DOS и OS/2;
  • кодировка Windows (1251);
  • кодировка, принятая на машинах Macintosh;
  • кодировка КОИ-8, используемая почти исключительно в Unix-системах.

Из-за того, что Unix является наиболее распространенной операционной системой на узлах Internet, и в том числе на почтовых серверах, последняя кодировка оказывается очень важной. Коды русских букв, для которых существуют совпадающие по чтению латинские, в КОИ-8 ровно на 128 больше, чем коды этих латинских букв. Благодаря этому текст, написанный по-русски в кодировке КОИ-8 и "потерявший", как было описано выше, старший бит каждого байта, все же можно прочитать. Правда, заглавным русским буквам при этом соответствуют строчные латинские и наоборот.

...и два подхода

Следует также иметь в виду, что система ЭП может решать две задачи: передачи писем и передачи файлов. Письмо - это простой текст, разбитый на строки ограниченной длины (лучше не более 80 символов, хотя почтовые программы в состоянии передавать и более длинные строки). Письма представляются почтовыми системами в формате, позволяющем читать и писать их непосредственно в текстовом редакторе почтовой программы, хранить в стандартной базе писем, включать в состав письма цитаты из ранее полученных посланий, автоматически порождать письма-ответы и т. д.

Что касается пересылаемого файла, то он может иметь любой формат, например быть документом текстового процессора или иллюстрацией. Такой файл требуется выделить из базы писем и обрабатывать вне почтовой программы - средствами приложения, предназначенного для обработки файлов данного типа.

И хотя делаются попытки интегрировать передачу писем и передачу файлов, сочетая преимущества двух подходов к проблеме, до сколько-нибудь заметного успеха еще далеко.

Заметим, что при встрече с препятствиями, описанными в предыдущем разделе, каждый из этих подходов предлагает свой способ их обойти. Поскольку ЭП предназначена для передачи именно писем, то файлы для пересылки все равно приходится кодировать (преобразуя в бессмысленный для "невооруженного глаза" текст письма). Разумеется, результат кодирования будет текстом в стандартной кодировке ASCII, и никаких проблем с восьмым битом не возникнет.

С другой стороны, при передаче письма, содержащего русский текст (если такая передача вообще возможна, т. е. сеть тем или иным образом поддерживает восьмибитовое представление), почтовая программа иногда (в последнее время все чаще) может сама перевести письмо из кодировки, принятой на машине отправителя, в кодировку, принятую у получателя. Файлы же приходят по ЭП, разумеется, в том виде, в каком были подготовлены отправителем, и проблема перекодирования ложится на получателя.

Старое не всегда плохо

Самое старое решение проблемы пересылки русского текста основано на передаче файлов. С тех пор как существует ЭП, у пользователей (в том числе чистокровных американцев, не пользующихся никаким языком, кроме американского английского) бывает необходимость передать в "почтовом конверте", например, исполняемую программу или ZIP-архив. Разумеется, такие файлы могут содержать любые байты. Решение, разработанное еще для первых систем ЭП, пригодно также для передачи русских текстовых файлов (конечно, если кодировки на машинах адресата и отправителя совпадают).

Для этого служит пара программ - UUENCODE и UUDECODE, первоначально разработанных для операционной системы Unix (буквы UU в названии программ означают Unix-to-Unix). В настоящее время эти программы существуют для всех основных ОС; они являются свободно распространяемыми и имеются на многих FTP-серверах.

Программы очень просты в применении. Например, версия для DOS применяется так (пересылается файл rusmail.txt):

uuencode rusmail.txt

В результате в текущем каталоге образуется файл rusmail.uue, состоящий только из символов семибитовой кодировки ASCII.

Этот файл можно включить в состав своего письма, сопроводив его, если нужно, комментариями на английском языке (или на русском, но в латинской транслитерации). В свою очередь, получатель сможет сохранить письмо в файле (такой режим имеют все почтовые программы) и применить к этому файлу (предположим, он называется letter.sav) программу UUDECODE:

uudecode letter.sav

В результате работы программы UUDECODE в текущем каталоге появится файл rusmail.txt - точная копия имеющегося у отправителя.

Естественно, таким образом можно отправлять документы, созданные в формате текстового процессора, архивы и любые другие файлы. Как правило, файлы перед кодированием программой UUENCODE архивируют, чтобы уменьшить объем передаваемой информации.

Описанный метод работы изрядно устарел, однако отличается завидной универсальностью: он выручает тогда, когда не работают более современные и утонченные.

Во многих почтовых программах кодирование и декодирование методом UUENCODE реализовано как одна из функций, так что даже не требуется выходить в ОС.

Стандарт MIME: напрасны ваши совершенства

Современный подход к проблеме передачи по ЭП информации, не являющейся чистым семибитовым текстом, основан на стандарте MIME, который, в свою очередь, предусматривает два способа пересылки такой информации. Первый - это пересылка вместе с письмом так называемого "вложения" (attachment). Вложением может быть любой файл (например, документ, архив, программа). Файл кодируется одним из методов, подобных рассмотренному в предыдущем разделе, а в технической шапке письма (Header) указывается, какой файл посылается и каким методом он закодирован. Пользуясь этой информацией, принимающая почтовая программа сможет раскодировать файл.

Второй способ состоит в кодировании текста письма. При его использовании раскодированный текст может обрабатываться непосредственно почтовой программой получателя (но это должен быть именно текст - допускаются нелатинские буквы, но не специальные символы: скажем, документ MS-Word почтовая программа, скорее всего, прочесть не сможет).

Стандартом MIME предусмотрены следующие методы кодирования сообщений электронной почты.

Base64 - переводит файл в последовательность стандартных ASCII-символов.

Quoted-Printable - сохраняет все встреченные стандартные символы, а каждый нестандартный заменяет на знак "=", за которым следуют две шестнадцатеричные цифры (код соответствующего символа).

Очевидно, что второй метод предпочтительнее, если в тексте, использующем в основном латинские буквы, есть отдельные вкрапления других символов, а первый - если весь или почти весь файл состоит из восьмибитовых символов.

Вложения и (несколько реже) сообщения могут кодироваться также методом UUENCODE, хотя он и не предусмотрен стандартом MIME.

К сожалению, большинство установленных в нашей стране почтовых программ не поддерживают стандарт MIME или поддерживают его не в полном объеме. Не редкость такая ситуация и за границей. Зачастую письмо, подготовленное с использованием MIME, не может быть прочитано получателем, поскольку его почтовая программа не имеет перекодировщика из форматов Base64 или Quoted-Printable (и, в отличие от UUDECODE, они недоступны ему как отдельные программы). Положение усугубляется тем, что стандарт MIME требует перекодировать письмо в стандартный формат, если транспортная программа (связывающая компьютер отправителя с почтовым сервером) не в состоянии передать его в восьмибитовой кодировке, и в результате перекодирование иногда происходит без какого бы то ни было прямого или косвенного участия отправителя.

Как мы уже упоминали, при пересылке файлов в виде вложений автоматическое перекодирование русских букв не производится - файл раскодируется в том же виде, в котором он был отправлен. Напротив, письмо (даже закодированное в соответствии со стандартом MIME) может содержать информацию о русской кодировке в виде строки заголовка, имеющей примерно следующий вид:

Content-Type: text/plain; charset=koi8r

Почтовая программа получателя опознает эту строку и автоматически преобразует текст письма в нужную кодировку.

Как наладить переписку по-русски

Успешная передача письма адресату в удобочитаемом виде гарантирована, когда почтовые программы отправителя и получателя корректно соблюдают стандарт MIME и правильно перекодируют русские буквы. Если первое условие выполнимо (почти все последние версии почтовых программ таковы), то второе выполняется нечасто. Что делать, если письма на русском языке все же искажаются или не доходят?

1. Если письма вообще не доходят, доходят без старшего бита в каждом байте или доходят закодированными, следует установить почтовые программы с поддержкой MIME и отправлять письма закодированными с соблюдением этого стандарта. Если приобрести такие программы невозможно, остается пересылать только файлы, пользуясь программой UUENCODE, как было описано выше. Если к тому же у отправителя и получателя разные кодировки, потребуются программы перекодирования русских текстов. Разумеется, эти программы можно установить только "на одном конце", выбрав ту операционную систему, для которой их проще достать (свободно распространяемые программы такого рода имеются на многих FTP-серверах - см. врезку "Полезные адреса").

2. Если письма доходят (непосредственно в восьмибитовом формате или с использованием MIME), но кодировки русских букв не совпадают, следует приобрести программы, поддерживающие автоматическое перекодирование, либо использовать для переписки одну и ту же кодировку, предпочтительно КОИ-8. Выбор этой кодировки обусловлен двумя причинами: во-первых, она просто устанавливается, а во-вторых, является стандартом де-факто для многих служб Internet, например телеконференций новостей.

Для установки кодировки КОИ-8 в DOS достаточно запустить соответствующий драйвер экрана и клавиатуры, например, R.COM (достоинство этой программы - простота переключения с КОИ-8 на 866 и обратно).

В Windows потребуется установить TrueType-шрифты (хотя бы один пропорциональный и один моноширинный) в кодировке КОИ-8, например ER-Bukinist и ROL-K8/Courier. Далее необходимо установить переключатель клавиатуры (от английской раскладки к русской для КОИ-8), например WinKey. В Windows 95 можно также перенастроить под КОИ-8 собственный переключатель клавиатуры.

Подробное описание установки русской кодировки КОИ-8, в том числе на другие платформы, можно найти на одном из WWW-серверов, перечисленных на врезке "Полезные адреса".

Что делать с "подпорченным" письмом

Допустим, вы получили письмо (предположительно по-русски), но не можете ни прочитать его, ни связаться с отправителем, чтобы выполнить процедуры из предыдущего раздела. Дадим некоторые рекомендации, что делать в этом случае.

1. Постарайтесь "на глазок" отождествить текст письма с какой-либо стандартной кодировкой (UUENCODE, Base64 или Quoted-Printable) - каждая из них имеет свой характерный вид. После этого примените соответствующую программу перекодировки (адреса FTP-серверов, где они могут быть, приведены на врезке "Полезные адреса").

2. Если ваша программа поддерживает MIME и умеет обрабатывать файл с письмом как почтовый архив, а перекодировка недоступна, можно попытаться проделать следующее:

  • сохранить письмо как файл;
  • исправить в текстовом редакторе строчки в шапке письма, начинающиеся с текста
Content-Type: ...
Content-Transfer-Encoding: ...

на

Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: base64

(либо, соответственно, на

Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: Quoted-Printable)
  • прочитать письмо из исправленного файла почтовой программой.

Если после выполнения пункта 1 или 2 получился текст, но в неподходящей кодировке, попробуйте применить утилиты перекодирования, возможно, неоднократно и в разных сочетаниях. Бывает, что подобрать сочетание не удается, - можно попросить отправителя письма послать вам русский алфавит (строку АаБбВв...) и, пользуясь им, настроить перекодировку, задав набор символов в какой-либо утилите, которая позволяет это сделать.

Фирма "Агама" недавно разработала программу Mail Reader, специально предназначенную для дешифровки искаженных писем, - правда, она работает только с Windows 95 и NT. Это коммерческий продукт, пробную версию (на 30 запусков) можно получить на узле "Агамы" (http://russia.agama.com/mailreader).


Александр Алмазович Суханов - преподаватель информатики в 57-й школе г. Москвы. E-mail: alsu@suhanov.dmttm.rssi.ru, http://main.mccme.rssi.ru/~alsu

Текст, закодированный методом UUENCODE

begin 644 rusmail.txt
MC:"OJ.BH(*RMI2"OKBW@X^"AJJ@-"@T*#0J`JZ6JX:"MI.`@D>/EH*VNH@T*
M#0H-"I.DJ**HXJ6K[*VN+""MKB#AJ."BI:SK(.VKI:KBX*ZMK:ZI(*^NY^+K
M("B=CRDL(*V@IZV@YZ6MJ*4-"JJNXJ[@Z^4@+2T@KJ&KI:/GJ.+L(*ZAZ:6M
MJ*4@K*6FI.,@J^ZD[*RH+"#@X^&HY*CFJ.#C[N+A[PT*HZ[@H*>DKB"LI:2K
..................................
MK:VNHZX@K:"AKN"@+@T*#0H-"HZA(*"BXJ[@I0T*#0J`JZ6JX:"MI.`@@*NL
MH*>NHJCG()"CY:"MKJ(@+2T@K^"EKZZDH**@XJ6K[""HK>2NX*R@XJBJJ""B
9#0HU-RVI(.BJKJNE(*,N((RNX:JBZRX-"@``
`
end







Текст, закодированный методом Quoted-Printable

Path: news.techno.ru!demos!Gamma.RU!srcc!news.simtel.ru!mts.bashkiria.su!=
uddias.bashkiria.su!newsserv=0D=0AFrom: System Administrator 

=2Ebashkiria.su>=0D=0ANewsgroups: relcom.rec.tourism=0D=0ASubject: =EE=E1=
=E4=F5=F7=EE=F9=E5 =F0=EC=E1=F7=F3=F2=E5=E4=F3=F4=F7=E1 =F0=EF =EE=E9=FA=EB=
=EF=EA =E3=E5=EE=E5 - 10%=0D=0ADate: Thu, 28 Nov 96 16:53:38 +0500=0D=0AD=







Текст, закодированный методом Base64

UGF0aDogbmV3cy50ZWNobm8ucnUhZGVtb3MhR2FtbWEuUlUhc3JjYyFuZXdzLnNpbXRlbC5y
dSFtdHMuYmFzaGtpcmlhLnN1IXVkZGlhcy5iYXNoa2lyaWEuc3UhbmV3c3NlcnYNCkZyb206
IFN5c3RlbSBBZG1pbmlzdHJhdG9yIDxyb290QHplc3Rhci5iYXNoa2lyaWEuc3U+DQpOZXdz
Z3JvdXBzOiByZWxjb20ucmVjLnRvdXJpc20NClN1YmplY3Q6IO7h5PX37vnlIPDs4ffz8uXk
8/T34SDw7yDu6frr7+og4+Xu5SAtIDEwJQ0KRGF0ZTogVGh1LCAyOCBOb3YgOTYgMTY6NTM6







Полезные адреса

Прежде чем начинать поиски в Internet, попробуйте обратиться к администратору почты на машине коллективного пользования или к системному администратору организации, предоставляющей услуги ЭП. Целый ряд программ может входить в ваш почтовый пакет под неизвестными вам именами или иметься у поставщика сетевых услуг.

А вот адреса некоторых WWW-страниц и общедоступных (анонимных) FTP-серверов.

http://www.relcom.ru/Russification/
Страница со ссылками на FTP-серверы, хранящие шрифты в разных кодировках, драйверы клавиатуры и т. д. для Windows, Macintosh и DOS, а также с советами по установке шрифтов и программ.

http://www.siber.com/sib/russify/
Страница с подробным описанием процедуры русификации для всех платформ.

http://www.nagual.ru/~ache/koi8.html
Страница, содержащая все, что нужно знать о кодировке КОИ-8. Важная информация для русификации Unix.

ftp://ftp.relcom.ru/windows/cyrillic/winkey.zip
Программа русификации клавиатуры (с возможностью ввода в КОИ-8) для Windows.

ftp://ftp.gu.net/pub/dos/cyrillic/r_2_1.zip или ftp://ftp.techno.ru/pub/msdos/koi8/ dos-cyr.arj
Программа русификации экрана и клавиатуры для DOS. Имеет статус условно-бесплатной (shareware) с неоговоренным сроком бесплатного использования.

ftp://ftp.techno.ru/pub/msdos/convert/
Каталог, содержащий программы UUENCODE и UUDECODE, а также MMENCODE - конвертер файлов форматов Base64 и Quoted-Printable.

http://www.cyber.com.au/~stargate/ Welcome.html
WWW-ссылка на программу CONVERT, осуществляющую преобразование текстов между всеми основными русскими кодировками. Программа имеется также в виде исходных текстов, что позволяет использовать ее на разных платформах.

Несколько оригинальных конвертеров (версии для DOS и исходные тексты) можно найти на личной Web-странице автора (http://www.mccme.ru/~alsu). Туда же предполагается поместить программу для "ручной" дешифровки искаженных писем в интерактивном режиме.


Некоторые программы, корректно работающие с русскими письмами

1. DOS, связь с почтовым сервером по протоколу UUCP.

UUPC версий не ранее 6.14g (в настоящее время вышла версия 6.20) совместно с dml 2.04. Есть поддержка MIME и полная перекодировка русских букв.

2. Windows (3.x и 95), связь с почтовым сервером по протоколу POP3.

Mini-Host, dMail for Windows, WIM (см. Андрей Травин, "Электронные почтальоны для Windows" - "Мир ПК", 1996 г., #11-12, с. 68), а также Eudora 1.5.4 и почтовый модуль программы Netscape Navigator версии 3.

3. Unix

Для этой ОС выбор труден: стандарт MIME соблюдают почти все современные программы-почтальоны, автоматическое перекодирование в КОИ-8 не производит пока ни одна из распространенных программ. Netscape Navigator 3 корректно указывает КОИ-8 в шапке отправляемого письма (давая программе получателя возможность правильно его перекодировать); впрочем, соответствующим образом можно настроить и простейшую почтовую программу этой ОС - команду mail.

4. Macintosh

Eudora 1.5.3 успешно перекодирует письма в кодировку КОИ-8 и из нее, справляется и с 1251. Требует явного указания необходимых перекодировок в настройках программы.

5. OS/2

IBM WebExplorer из русской версии OS/2 Warp 4 (Merlin) поддерживает кодировку КОИ-8 и корректно работает с русской почтой. Если связь с почтовым сервером происходит по протоколу UUCP, может оказаться удобным запускать в сеансе DOS программы UUPC и dml.