словник | перекладачка | факти | тексти | програми
щодо | посилання | новини | гостьова книга | пошук
початок << тексти  << автор  << твір

Дмитро Ковальов (kov@tokyo.email.ne.jp)

Використання української мови в EXMH.



Загальний огляд можливостей EXMH

EXMH -

freeware програма з графічним інтерфейсом призначена для читання, написання та передачі електронної пошти, і призначена для роботи в середовищі X Window операційних систем Юнікс. Тобто, в термінолоґії Юнікса - це MUA (Mail User Agent). Ми будемо про такого типу програми казати "Користувацька програма електронної пошти", роблячи наголос на "користувацька". Таким чином ми будемо відрізняти її від програми "доставки електронної пошти" (MTA - Mail Transport Agent англійською), зразком якої є sendmail.

Дякуючи вбудованим можливостям по підтримці MIME (Multipurpose Internet Mail Extentions), EXMH легко може бути пристосований до читання листів українською мовою.


Що потрібно для роботи EXMH:

Оскільки для прийому та передачі повідомлень електронної пошти EXMH користується пакетом Rand Messaging MH, то очевидно, що для роботи EXMH потребує також попереднього встановлення цього пакету.

Часто пошта електронними шляхами передається закодованою (про причини цього йтиметься трохи далі). Для читання листів переданих в закодованому вигляді в кодах uuencoded, base64, quoted-printable, тощо, потрібно встановити також пакет metamail.


MIME протокол для електронної пошти

Напочатку - трохи теорії. Ті, хто знає, як працює MIME, можуть пропустити кілька абзаців і почати конкретно з конфіґурації.

Найперші системи електронної пошти працювали тільки з англійською мовою і користувалися 7 бітними кодами для передачі всій повідомлень. На певний час цього було достатньо. Пізніше виявилося, що 7 бітів недостатньо для того, щоб написати все на світі. 7 бітів дають тільки 128 можливих кодів. Навіть розширивши таблицю до 8 бітів (тобто одного байту) не вдається вирішити цієї проблеми - кодів стає всього вдвічі більше - 256.

З'явився стандарт MIME. Він дає можливість для кожного окремого листа вказати, якою саме мовою (а точніше якою кодовою таблицею) листа написано. MIME дозволяє ще дуже багато інших корисних речей, таких, як передача графічних файлів по електронній пошті, програм і т.п. Але все це виходить поза межі даного обговорення.

Деякі повідомлення (якщо вони є повністю 8 байтними - тобто 8й біт в них задіяно) передаються в закодованому одним із способів вигляді. Справа в тому, що деякі сервери електронної пошти "зрізають" 8-й біт при передачі. Тому таке закодовування зберігає цей самий 8й біт і дає змогу передати листа неушкодженим. Відмітимо, що це кодовування не має нічого спільного з криптографією і не може служити для засекречування своєї кореспонденції. Багато серверів (особливо в тих країнах, які повинні користуватися 8-ми бітними схемами) влаштовані таким чином, що вони автоматично закодовують листи, які йдуть від абонентів, якщо вони 8 бітні, та розкодовують листи, які йдуть до абонентів, якщо ці листи закодовані. Тому Ви можете навіть і не знати, що лист, який прийшов до Вас пройшов кілька трансформацій на своєму шляху. Про це можна дізнатися тільки уважніше поглянувши на заголовки листа (шукайте в них що небудь типу "X-mime-autoconverted:..." )

Користувацька програма електронної пошти, яка підтримує протокол MIME, при передачі листа вставляє в лист кілька додаткових заголовків, які говорять про те, в якій саме кодовій таблиці написано листа. Ось, наприклад, як виглядають заголовки листа, якого я відправив сам собі в кодовій таблиці Windows-1251:

Return-path: dk@sophy.sakae
Return-path: 
Received: from sophy.sakae (localhost [127.0.0.1])
	by sophy.sakae.com (8.8.7/8.8.7) with ESMTP id UAA13213
	for ; Thu, 22 Apr 1999 20:35:45 +0900
Message-id: <199904221135.UAA13213@sophy.sakae>
X-mailer: exmh version 2.0.3
Mime-version: 1.0
Content-type: text/plain ; charset = windows-1251
Content-transfer-encoding: 8bit
X-mime-autoconverted: from quoted-printable to 8bit by sophy.sakae.com id UAA13213 

В цих заголовках нас поки що цікавить тільки рядок "Content-type:..." В цьому рядку вказано тип повідомлення: text/plain, тобто звичайний текст і кодова таблиця цього тексту - windows-1251.

На цьому, власне, і закінчується теорія. Щоб EXMH зміг показувати вірно листи у відповідній кодовій таблиці, його (тобто EXMH) треба цьому навчити - потрібні кодові таблиці треба записати в файлі конфіґурації EXMH і вказати, яким саме шрифтом для якої кодової таблиці користуватися.

Але крім цієї гарно сформульованої теорії є ще грубе і безжалісне буденне життя. Ще існують в світі програми електронної пошти, які не підтримують MIME, або що ще гірше, які підтримують MIME, але вставляють невірно сформовані заголовки в листи. Наприклад, замість "windows-1251" в усім добре відомій операційній системі раніше використовувалося "cp1251" (що означає по суті теж саме, але іншими словами - Code Page). Таку ситуацію досить легко передбачити і вирішити цю проблему просто вставивши додаткові рядки конфіґурації для EXMH. Далі ми побачимо, як це зробити.

Гірше, якщо ви отримуєте листи, написані в одній кодовій таблиці, але в заголовках листів вказано, що вони написані в іншій. (Наприклад, ви побачите "iso-8859-1" замість "1251".) Для цієї ситуації коректного вирішення немає, крім того, що попросити респондента, з яким ви переписуєтеся змінити конфіґурацію своєї системи, і добре, якщо він або вона працює в одній із систем, які дозволяють встановити таку конфіґурацію. Якщо ж ні, вам доведеться йти на позазаконні дії, і дурити свого EXMH і заносисти в нього некоректну конфіґурацію. Тобто, в нашому прикладі, змусити EXMH всі повідомлення, що прийшли в кодовій таблиці "iso-8859-1" показувати шрифтами кодової таблиці "windows-1251".

Ще (жах!) ви можете опинитися в ситуації, коли різні ваші дописувачі користуються різними кодовими таблицями, наприклад "koi8-u" та "windows-1251", але в заголовках у них вказано все те-ж "iso-8859-1", або заголовки відсутні. Вітаю вас - ви опинилися на самому дні пекла. Виходу з цієї ситуації немає. Це крапка.

Тож, ми описали блискуче теоретичне майбутнє ( електронно-поштовий теоретичний комунізм) і спустилися до найнижчих, найнецікавіших рівнів будення (розвинений соціалізм Радянсього Союзу?). Тепер до роботи. Розглянемо конкретну конфіґурацію EXMH.


Конфіґурація EXMH

Настроювання EXMH у два кроки

  1. за допомогою меню конфіґурації, вбудованого в EXMH;
  2. редагуванням файла конфіґурації EXMH .exmh-defaults, що знаходиться в домашній директорії кожного користувача.

Перший з двох способів простіший для непідготованого користувача, але не дає повного контролю над ресурсами програми. Особливо це стосується настроювання MIME. Мало чого можна добитися користуючись тільки мишею, більшість роботи потрібно виконати, редагуючи вказаний файл.

1. Настроювання за допомогою меню конфіґурації

Впевніться, що EXMH настроєний показувати MIME

Для початкової конфігурації EXMH треба активізувати (вмикнути) MIME. EXMH Preference Window

  • Це робиться з меню конфіґурації EXMH. В головному вікні програми натисніть кнопку Prefernces. Це викличе на екран нове вікно з стовпчиком кнопок у ньому Натисніть кнопку MIME в цьому вікні і у новому вікні Exmh Preferences - MIME вмикніть режим 'Enable MIME Display': Enable MIME Display option
  • Після цього EXMH буде вірно показувати листи, написані з використанням MIME, тобто буде їх декодувати і пропонувати записати файли на диск, показуватиме графічні файли, тощо.
  • Але, щоб читати листи українською мовою цього ще замало. Потрібно встановити необхідні шрифти для української мови.

Встановіть потрібні шрифти для читання листів (не MIME)

Щоб навчити EXMH вірно показувати ті листи, в яких не встановлені MIME-заголовки, треба настроїти його стандартні шрифти (тобто шрифти призначені для показу не-MIME листів). Ці шрифти мають належати до відповідної кодової таблиці. Це робиться з графічного меню конфіґурації.

  • Поверніться знову до вікна Preferences. Натисніть в цьому вікні кнопку Fonts. Вам буде представлене нове вікно із довжелезним списком всіх шрифтів встановлених у вашій системі. Інколи сканування всіх шрифтів може зайняти досить відчутний проміжок часу, тож не хвилюйтеся, якщо вікно відкриється в повний розмір не відразу - глибоко вдихніть та видихніть кілька разів.

EXMH має можливість встановлювати різні шрифти для різних областей вікна. Ці області англійською називаються "widget" - скорочення від двох слів "window" та "gadget". Приблизний український аналоґ був би щось типу "віконне причандалля" (шибка?). В лівому горішньому куті вікна шрифтів знаходиться меню Widget..., яке саме і вмикає вибраний шрифт у відповідному widget'і.

Font selection window %


Для того, щоб користуватися українською вам потрібно настроїти на український шрифт такі widget'и: "*Msg*Text.font" - для читання тексту листа, "*Ftoc*Text.font"(Folder Table of Content) - для вірного відображення повних імен адресатів та поля "Subject:", якщо вони написані українською та "*Sedit*Text.font" (Small Editor - вбудований редактор EXMH) - для написання листів українською.

Виберіть потрібний шрифт із списку. Наприклад, в моїй системі встановлений шрифт: -gemini-times-bold-i-normal--10-100-75-75-p-54-koi8-u , у кодовій таблиці koi8-u. Після того, як ви вибрали шрифт з поданого списку, виберіть з меню "Widget..." потрібний об'єкт, в якому повинен використовуватися обраний шрифт. Не забудьте в кінці всіх установок натиснути кнопку "Save" в вікні Preferences.

Редагування файла конфіґурації EXMH

Настроювання EXMH для читання листів, написаних з вживанням MIME, робиться за допомогою редагування його файла конфіґурації (цей файл .exmh-defaults створюється програмою в директорії користувача при її першому запуску).

  • Відкрийте цей файл у вашому улюбленому редакторі і додайте на вершині файлу наступні рядки. Їх треба додавати у горішній частині файлу, перед різноманітними коментарями, що є у файлі. Під часу запису конфіґурації EXMH перезаписує цей файл, але не торкає ті частини, що йдуть на початку файлу. Але, якщо ваші рядки записані всередині файлу - EXMH може їх знищити. Краще також редагувати файл при непрацюючому EXMH з тої ж самої причини - при виході EXMH може перетерти ваші редагування.
    !!! MIME 
    *mimeCharsets: us-ascii iso-8859-1 iso-2022-jp
    *mimeUCharsets: koi8-u koi8-r windows-1251
    !
    *mime_us-ascii_registry:    iso8859
    *mime_us-ascii_encoding:    *
    *mime_iso-8859-1_registry:  iso8859
    *mime_iso-8859-1_encoding:  1
    *mime_iуааso-8859-8_registry:  iso8859
    *mime_iso-8859-8_encoding:  8
    *mime_iso-2022-jp_registry:   jisx0208.1983
    *mime_iso-2022-jp_encoding:   *
    !!! KOI8
    *mime_koi8-u_registry:   koi8
    *mime_koi8-u_encoding:   u
    *mime_koi8-u_fixed_families:   courier 
    *mime_koi8-u_plain_families:   bookinist
    *mime_koi8-u_proportional_families:   universe 
    !!! KOI8-R
    *mime_koi8-r_fixed_families:   courier
    *mime_koi8-r_registry:   koi8
    *mime_koi8-r_encoding:   u
    *mime_koi8-r_plain_families:   bookinist
    *mime_koi8-r_proportional_families:   universe
    !!! WiNDOZE
    *mime_windows-1251_registry:   cp1251
    *mime_windows-1251_encoding:   u
    *mime_windows-1251_fixed_families:   courier
    *mime_windows-1251_plain_families:   bookinist
    *mime_windows-1251_proportional_families:   universe
    

Файл .exmh-defaults записаний у форматі подібному до формату файлу .Xdefaults. Якщо ви не знайомі з форматом цього файлу, подивіться man X де він описаний. В цьому прикладі: всі рядки, що починаються із знаку оклику - коментарі, перші два рядки описують які типи MIME кодування повинен розуміти EXMH. Перший рядок описує стандартні кодові таблиці, що використовуються для англійської, ряду західно-європейських та японської мови відповідно. Другий рядок (*mimeUCharsets) описує специфічні кодові таблиці користувача. В нашому випадку описані три додаткові таблиці: koi8-u koi8-r windows-1251.

Після цього абзацу йде власне опис кожної з існуючих кодових таблиць. А саме: для кожної з них вказується шрифт, який застосовується при показі тексту.

Для кожної кодової таблиці вказуються такі параметри: family, registry та encoding. Також для кожної таблиці треба вказувати три різних сімейства шрифтів. Перше сімейство (plain) використовується для звичайних текстових листів без використання спеціального форматування (як text/enriched або text/html). Друге та третє сімейства (fixed та proportional) використовуються для text/enriched та text/html Для кожного типу тексту можна вказувати по кілька різних шрифтів. В цьому випадку EXMH по черзі перебиратиме вказані шрифти і вибере той, який є в системі. Наприклад:

*mime_koi8-u_fixed_families:   courier fixed
*mime_koi8-u_plain_families:   bookinist
*mime_koi8-u_proportional_families:   universe gemini

У випадку з наведеним вище шрифтом "gemini" ці параметри будуть "times", "koi8" та "u" відповідно. Але оскільки в моій системі шрифт "gemini" існує тільки в одній кодовій таблиці koi8-u, я його не застовую для MIME пошти, а користуюся для цього шрифтами, створеними з TrueType шрифтів Гавіна Хелфа. Шрифти переведені в формат PostScript і встановлені в X Window. Процес конвертування та встановлення шрифтів в Лінаксі описаний в іншому документі на цій же сторінці.

Шрифти, отримані з TrueType шрифтів Гавіна Хелфа, існують в кількох кодових таблицях. Серед них - koi8 та cp1251. Якщо ви чекаєте листів також від друзів, які користуються Макінтошами або DOS, ви можете додатково встановити шрифти для Macintosh Standard Cyrillic чи для Альтернативної кодової таблиці CP-866.

Поле Subject: українською мовою

Закодовані і не закодовані заголовки

Особливим питанням є вірне відображення заголовків повідомлення, коли ці заголовки написані кирилицею. На прикладі внизу ви можете побачити, що заголовок "Subject" повідомлення виглядає зовсім нормально в основній панелі (панель повідомлення) і що його зовсім не видно в панелі із списком директорії.

В цьому прикладі приведений один зразок листа, а саме, коли поле Subject передається прямим текстом (що не завжди вірно, деякі сервери можуть його "порізати" і тоді ви отримаєте звичайне сміття замість Subject'а). Набагато коректніше MIME-закодовувати Subject аналоґічно до того, як це робиться із основним текстом листа. Тоді неушкоджене надходження листа до адресата буде гарантоване.

Я не знаю, як змусити MH (чи EXMH) закодовувати поля Subject, але часто я отримую листи від адресатів з іншого боку (з боку Віндовсів) в яких Subject поданий як MIME. Можливо можна також закодовувати повні імена адресатів, але цього я також не знаю.

Ось як, наприклад, виглядає Subject-заголовок, в якому російською в koi8-r написано "Ответ:" :

Subject: =?koi8-r?B?79TXxdQ6IA==?=

І саме так цей заголовок буде виглядати в панелі директорії, якщо не зробити ще деякі заголовки.

На жаль я знаю, як зробити так, щоб MH вірно розкодовував заголовки тільки в одній кодовій таблиці. Це означає, що, якщо Ви отримуєте листи від адресатів, які користуються різними кодовими таблицями, то ви зможете читати їх листи без проблем, але заголовки листів будуть виглядати по-людськи тільки в одній кодовій таблиці. Так, більшість Віндовсів і досі користуються koi8-r, і тому я настроїв свій EXMH саме на цю кодову таблицю. Але, якщо раптом я отримаю від когось листа із MIME-закодованим Subject'ом, то я його не зможу побачити. Але ще раз повторю - це стосується лише панелі директорії, основна панель листа показує Subject так як треба.

Сканування директорії

Вигляд панелі із списком директорії в EXMH визначається конфіґурацією не самого EXMH, а зовнішньої програми з пакету MH. Все, показане в панелі директорії EXMH є результатом роботи програми scan. Для того, щоб scan вірно відображала MIME-заголовки, треба встановити дві змінні середовища користувача.

По-перше

Локаль користувача повинна бути встановлена вірно, або як мінімум повинна бути 8-байтною;

По-друге

Потрібно в змінній середовища MM_CHARSET встановити потрібну кодову таблицю.

Локаль

Щоб вірно встановити локаль, вам потрібно буде перевірити, які локалі встановлені у вашій системі і відповідно настроїти своє середовище. Так, наприклад, в моєму Sparc RedHat 5.2 встановлена тільки російська локаль, а в Mandrake 6.0 для PC вже є встановлена українська локаль для koi8-u. Я думаю, що RedHat 6.0 також має українську локаль.

Перевірити встановлені локалі можна подивившись в директорію /usr/share/locale (це стосується тільки Лінакса, інші Юнікси напевне мають інші директорії, можливо також деякі інші дистрибутиви Лінакса мають локалі в інших місцях).

Якщо ви побачите в цій директорії піддиректорії з назвами uk, uk_UA, то в вашій системі мається українська локаль. Якщо ж ви бачите тільки піддиректорії з назвами ru* - ви обмежені тільки російською локаллю.

Щоб встановити вірну локаль, вам десь у стартових скриптах (~/.profile, ~/.cshrc, ~/.bashrc абощо) потрібно мати рядок подібний до одного з наступних:

LANG=uk_UA
export LANG

для командної оболонки Бьорна (/bin/sh) та його похідних, або

setenv LANG uk_UA

для csh та похідних.

Кодова таблиця

Кодова таблиця встановлюється подібно. В /bin/sh (/bin/bash) це буде:

MM_CHARSET=koi8-r
export MM_CHARSET

, в /bin/csh (/bin/tcsh) -

setenv MM_CHARSET=koi8-r

Якщо вам не дуже хочеться возитися з усіма цими змінними середовищами (або якщо ваша єдина мета - це читати пошту українською мовою), ви дуже просто можете обійтись без цього. Вам потрібно буде запускати EXMH таким рядком:

bash -c "(export LANG=uk_UA; export MM_CHARSET=koi8-r; exmh)&"

Приклад

Exsmples of Code page Тож, маючи такі установки, можна читати листи написані різними кодовими таблицями. Але крім цього EXMH дає можливість читати листи, в яких комбінуються різні кодові сторінки в одному і тому ж листі.

На малюнку показаний зразок екрану EXMH, в якому відкритий лист із двома частинами (attachments). Одна з частин написана кодовою таблицею koi8-u, в той час як інша - за допомогою Windows-1251. Як видно, одночасно обидві частини показані коректно, відповідним шрифтом. Перша частина повідомлення написана в кодовій таблиці koi8-u і не має MIME-заголовку, через що показана іншим шрифтом - "gemini".


Для особливо зацікавлених: ось як виглядає сам файл повідомлення, записаний на диску (заголовки опущено). Як видно 2 повідмлення передані як attachement, зберігаються на диску закодованими. EXMH розкодовує їх перед тим, як показати на екрані.

To: dk@sophy.sakae.com
Subject: Зразок застосування різних кодових таблиць в EXMH
Mime-Version: 1.0
Content-Type: multipart/mixed ;
	boundary="==_Exmh_4133381880"
Date: Mon, 26 Apr 1999 19:04:03 +0900
From: Dmytro Kovalev 

This is a multipart MIME message.

--==_Exmh_4133381880


Це - зразок екрану EXMH, в якому відкритий лист із двома частинами
(attachments). Перша частина тексту (цей текст) написаний у кодовій
таблиці koi8-u і переданий не як attachment, але як головна частина
поштового повідомлення.  Дві інші частини - записані кожна в своєму
окремрму файлі і передані як attachment. Друга частина написана
кодовою таблицею koi8-u, третя - в кодовій таблиці Windows-1251. Як
видно, одночасно всі частини показані коректно, відповідними
шрифтами.




--==_Exmh_4133381880
Content-Type: text/plain ; charset = koi8-u ; name="example_koi8.txt"
Content-Description: example_koi8.txt
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="example_koi8.txt"

48Ug2tLB2s/LINTFy9PU1SwgzsHQydPBzsnKINcgy8/Ez9emyiDUwcLMycOmIGtvaTgtdQoK
wcLXx63ExaTW2smmysvMzc7P0NLT1NXGyMPe293YwNEK4eL3573k5bT2+um26uvs7e7v8PLz
9PXm6OP++/344PE=

--==_Exmh_4133381880
Content-Type: text/plain ; charset = windows-1251 ; name="example_cp1251.txt"
Content-Description: example_cp1251.txt
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="example_cp1251.txt"

1uUg5/Dg5+7qIPLl6vHy8ywg7eDv6PHg7ejpIOIg6u7k7uKz6SDy4OHr6PazIFdpbmRvd3Mt
MTI1MQoK4OHi47Tk5brm5+iz6err7O3u7/Dx8vP09fb3+Pn8/v8KwMHCw6XExarGx8iyycrL
zM3Oz9DR0tPU1dbX2Nnc3t8K

--==_Exmh_4133381880--



Зміни та доповнення

Березень-квітень 1999

Перша редакція документа

28 жовтня 1999

Деякі косметичні зміни. Новий розділ про "Subject:"


Natalya and Dmytro Kovalev
Пишіть нам за адресою: kov@tokyo.email.ne.jp
Домашня сторінка: http://www.asahi-net.or.jp/~as9d-kvlv
вгору
 
[an error occurred while processing this directive] TopList
© 2000-2003, Київ, Соломко Валентин -- ідея та наповнення, графічне опрацювання -- проєкт дизайн, змiнено -- 08.06.2003 14:29:54