Как заставить HP OpenMail работать с различными кодировками кириллицы
---------------------------------------------------------------
Авторы инструкции:
Константин Белозеров (kbeloz@dol.ru), http://kbeloz.narod.ru
http://www.livejournal.com/users/kbeloz/
Александр Волобуев (alxvol@dol.ru)
Date: 10 Mar 2000
---------------------------------------------------------------
Аннотация
Ниже приводится описание "почти честной" русификации OpenMail'а.
"Почти" - потому что при данном способе OpenMail хранит сообщения внутри
себя в win-1251, но остается уверен, что это -- ISO8859-1. Если кто-нибудь
из читателей может объяснить, как объявить OpenMail'у и его клиентам, что
используемая внутренняя кодировка есть 1251, сообщите нам, пожалуйста.
Признаться, мы до сих пор не понимаем, как все это должно работать в
идеальном случае. Данная методика появилась как она есть от недостатка
времени и желания разбираться досконально -- рассматриваемый продукт не
вполне то, чему хотелось бы посвятить остаток жизни :).
Текст написан как тупая инструкция. Кто хочет разобраться, как
составляются таблицы перекодировки и почему номера charset'ов начинаются с
1500 -- you are welcome, в man'ах и комментариях в файлах от Hewlett-Packard
все написано. Кто разбираться не хочет -- сия инструкция поможет.
Описывается следующая ситуация -- все исходящие во внешний мир
сообщения преобразовываются в koi8-r, входящие из внешнего мира в форматах
koi8r, iso8859-5, cp866, koi8-u преобразовываются в win-1251 для Outlook'а -
как нам кажется, наиболее типичная на сегодня конфигурация (может, за
исключением koi8-u :-)).
Везде далее ~ - это каталог /var/opt/openmail. Поехали.
Зарегистрировать кодировки в ~/sys/CSInfo.cfg
Зарегистрировать кодировки в ~/sys/CSInfo.cfg
Изменить номер версии VERSION = 2
Написать:
CHARSET_NAME = WIN_1251
CHARSET_NUMBER = 1500
INTERCHANGE = yes
CHARSET_NAME = KOI8_R
CHARSET_NUMBER = 1501
INTERCHANGE = yes
CHARSET_NAME = ISO8859_5
CHARSET_NUMBER = 1502
INTERCHANGE = yes
CHARSET_NAME = CP866
CHARSET_NUMBER = 1503
INTERCHANGE = yes
CHARSET_NAME = KOI8_U
CHARSET_NUMBER = 1504
INTERCHANGE = yes
Зарегистрировать кодировки в ~/sys/CharMap
Зарегистрировать кодировки в ~/sys/CharMap
OMCHAR=WIN_1251
OMSTDID=1500
OMCHAR=KOI8_R
OMSTDID=1501
OMCHAR=ISO8859_5
OMSTDID=1502
OMCHAR=CP866
OMSTDID=1503
OMCHAR=KOI8_U
OMSTDID=1504
Прописать соответствие между зарегистрированными кодировками OpenMail и
кодировками MIME в ~/sys/mime.cs
Прописать соответствие между зарегистрированными кодировками OpenMail и
кодировками MIME в ~/sys/mime.cs
Написать (подумав о том, что в поле charset пишут мэйлеры, с которыми
вам приходится работать -- со всеми сумасшедшими справиться нельзя, но
постараться стоит, не так ли?):
KOI8_R koi8-r
ISO8859_5 iso-8859-5
CP866 cp866
WIN_1251 windows-1251
KOI8_U koi8-u
И т.п.
Указать перекодировку в ~/sys/mimeout.str
Указать перекодировку в ~/sys/mimeout.str
Закомментировать строку после слов # Preserve ISO 8859 text
Написать
1167.ISO8859_1 1167.KOI8_R R
Создать ~/sys/mimein.str
Создать ~/sys/mimein.str
Скопировать в mimein.str файл mimeout.str, изменить заголовок и
написать
1167.WIN_1251 1167.ISO8859_1 R
1167.KOI8_R 1167.ISO8859_1 R
1167.CP866 1167.ISO8859_1 R
1167.ISO8859_5 1167.ISO8859_1 R
1167.KOI8_U 1167.ISO8859_1 R
Подложить файлы из omcyrenc.tar (прилагается) в каталог
~/csetconvПодложить файлы из omcyrenc.tar (прилагается) в каталог ~/csetconv
Удалить ~/sys/CSTables.ld, ~/sys/LCMap.bin
Выполнить
Удалить ~/sys/CSTables.ld, ~/sys/LCMap.bin
Выполнить
omconfsm -f CSInfo.cfg
omconfsm --f CharMap
omconfsm --f CSTables.ld
omconfsm --f LCMap.bin
omconfsm --f csetconv[AV1][KBB2]
Перезапустить OpenMail, не веря утверждениям, что после перестроения
shared memory (omconfsm) все заработает. Не заработает, перезапустите.
Все.
Примечания для тех, кому не спится.
Примечания для тех, кому не спится.
Еще один файл, который надо бы поправить, находится в каталоге
~/upper[AV3]. Зачем его править, не вполне ясно, так как неизвестно, в каких
ситуациях OpenMail производит преобразование из строчных символов в
прописные. Но, поскольку наша 8859-1 на самом деле 1251, правим файл 500.s
(правки немного, кто захочет, тот разберется) и вытираем файл 500.b.
Прилагаемые файлы перекодировок получены совершенно механически путем
перекрестного сопоставления соответствующих кодовых таблиц через Unicode.
Символы, отсутствующие в целевой таблице, превращаются в вопросительный знак
0x3F. Естественно, при этом игнорируется то, что некоторые идеограммы
исходной таблицы при творческом подходе могут быть преобразованы в хотя и не
идентичные, но сходные идеограммы целевой (например, псевдографика из koi и
866 при перекодировании в 1251 -- в символы '-', '|' и т.п.). Есть простор
для деятельности.
Компиляцию текстовых таблиц из csetconv и upper[AV4] производит
программа omconfsm, которая очень плохо относится к не приглянувшимся ей
исходным данным. В частности, выяснилось, что шестнадцатиричные цифры,
большие девяти, должны быть написаны исключительно маленькими буквами (0xab,
но не 0xAB). Файл, в котором omconfsm померещилась ошибка, игнорируется, а
по записям в логе ничего понять нельзя. Такое впечатление, что все это дело
писали вчерашние школьники :(
Вытяжка из документа IANA по поводу допустимых названий кириллических
charset'ов (то есть что при некотором фанатизме можно написать в mime.cs. Мы
не стали):
Name: KOI8-R (preferred MIME name)
Alias: csKOI8R
Name: windows-1251
Name: ISO_8859-5:1988
Alias: iso-ir-144
Alias: ISO_8859-5
Alias: ISO-8859-5 (preferred MIME name)
Alias: cyrillic
Alias: csISOLatinCyrillic
Name: IBM866
Alias: cp866
Alias: 866
Alias: csIBM866
Name: KOI8-U
[AV1] Если перезапускать все полностью, то этот шаг лишний.
[KBB2]Ты где это проверял? По моим наблюдениям, без обоих шагов
плоховато.
[AV3] Или toupper? Вот этого не помню, и посмотреть возможности нет.
[AV4] Еще одно упоминание upper.
Таблицы перекодировок для кирилизации OpenMail (omcyrenc.tar, 20Kb)
Last-modified: Mon, 12 Apr 2004 20:13:18 GMT