Взаимоотношение MIME и locale.

/* все очень спорно, но вот такое сложилось мнение */

Фактически мы имеем дело с 3-мя различными об'ектами:

  1. текущие фонты и раскладка клавиатуры
  2. установленное значение locale (LANG="...")
  3. кодировка почтового сообщения charset=xxxxx MIME

Само по себе, значение locale ( а точнее значение категорий LC_CTYPE и LC_COLLATE ) оказывает влияние только на обработку символов.

* Средствами locale и стандартного *nix ввода/вывода никак нельзя ни повлиять, ни даже спросить текущее значение аппаратной конфигурации (кодировки). Стандартных средств изменения и определения кодировки нет ни для "аппаратных" (подключенных через ASYNC порт) терминалов , ни для эмуляторов консоли (SCO, BSD или LINUX console), ни для окна xterm в X-Windows. Понятий "кодировка" или "набор символов" нет ни в termios, ни в базах описания терминалов termcap и terminfo, ни даже в "высокоуровневых" библиотеках управления терминалом curses и ncurses.

С другой стороны, почтовые сообщения в MIME могут содержать различные charset даже в пределах одного сообщения.

Задача почтовой программы -- правильно отобразить различные charset для text/plain и text/html. Это легко сделать в оконных системах (Windows, X-Windows, e.t.c.) но невозможно для стандартного *nix терминального ввода/вывода.

В наиболее старой и известной программе для работы с MIME - metamail(1) ( ftp://ftp.funet.fi/pub/unix/mail/metamail/ ) впервые столкнулись с данной проблемой. Именно для metamail была впервые введена переменная окружения MM_CHARSET которая задавала "текущий" charset (набор символов) на консоли. Предполагалось, что пользователь его знает. Постепенно эта переменная стала трактоваться как обозначение текущей аппаратного окружения ( фонтов, e.t.c. ) и современные почтовые программы ( mh, elm ) активно используют эту переменную.

 

* Буду чрезвычайно благодарен за дополнения и исправление ошибок mailto:alec@sensi.org (26-SEP-1997)