Как заставить HP OpenMail работать с различными кодировками кириллицы --------------------------------------------------------------- Авторы инструкции: Константин Белозеров (kbeloz@dol.ru), http://kbeloz.narod.ru ║ http://kbeloz.narod.ru http://www.livejournal.com/users/kbeloz/ ║ 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) ║ omcyrenc.tar