/* все очень спорно, но вот такое сложилось мнение */
Фактически мы имеем дело с 3-мя различными об'ектами:
Само по себе, значение 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)