Следовать стандарту -- это ещё не все. В реальной жизни надо обеспечить ещё и обратную совместимость. В нашем случае это означает, что наши настройки не должны препятствовать созданию данных с помощью других кодировок, отличных от стандартной. Это могут быть данные в CP866 или в CP1251. Также должна быть возможность запускать русскоязычные программы из MS-DOS.
В большинстве случаев (кроме HTTP) достаточно обеспечить преобразование данных в KOI8-R. Если мы говорим о данных с простой структурной организацией, то это просто -- смотрите раздел Символьная перекодировка.
Другое дело -- данные с определённой структурой. В этом случае действия не так тривиальны. Я попробую описать стандартные подходы для решения этой проблемы.
MIME формат -- стандартное архитектурно-независимое представление
данных. Первоначально это представление данных было разработано для письменных
сообщений, а сейчас его используют и в других местах. Стандарт MIME определяет
формат, который открыт для расширений и позволяет поддержку и работу со
специфическими данными. Например, если я послал письмо, содержащее MIME
объект video/mpeg
типа (MPEG файлы), моя программа приёма электронных
сообщений автоматически декодирует его и запустит MPEG проигрыватель.
Большинство UNIX программ, предлагающих MIME сервис, для этих целей используют
пакет metamail
, который содержит набор утилит и файлов данных для работы с
объектами MIME. Несколько файлов конфигурации (/etc/mailcap
для
системной настройки и ~/.mailcap
-- для пользовательской настройки)
определяют директивы для работы с объектами MIME различных типов.
Поэтому если вы получили поток MIME данных, содержащий текст в одной из устаревших кодировок, вы можете определить соответствующие MIME-директивы для конвертации такого текста в KOI8.
Ниже перечислены MIME-законы, которые описывают правила работы с обычными текстами и текстами в richtext формате, использующими другие кодировки, отличные от KOI8. Вы можете вставить эти директивы в один из файлов конфигурации MIME.
Обратите внимание: Эти директивы используют пакет translit
для того, чтобы
производить само преобразование. Для более полной информации об этой программе
и для информации по перекодировке смотрите раздел
Символьная перекодировка.
text/plain; translit -t cp1251-koi8.rus < %s; test=test \ "`echo %{charset} | tr '[A-Z]' '[a-z]'`" = cp1251; copiousoutput text/richtext; translit -t cp1251-koi8.rus < %s; test=test \ "`echo %{charset} | tr '[A-Z]' '[a-z]'`" = cp1251; copiousoutput text/plain; translit -t alt-koi8.rus < %s; test=test \ "`echo %{charset} | tr '[A-Z]' '[a-z]'`" = cp866; copiousoutput text/richtext; translit -t alt-koi8.rus < %s; test=test \ "`echo %{charset} | tr '[A-Z]' '[a-z]'`" = cp866; copiousoutput text/plain; translit -t alt-koi8.rus < %s; test=test \ "`echo %{charset} | tr '[A-Z]' '[a-z]'`" = alt; copiousoutput text/richtext; translit -t alt-koi8.rus < %s; test=test \ "`echo %{charset} | tr '[A-Z]' '[a-z]'`" = alt; copiousoutput
Обычно это работает только в случае текста. Бинарные файлы данных должны сами отрабатывать данные в различных кодировках (по крайней мере, это должны делать программы, создавшие их). Поэтому если вы послали файл Microsoft Word в кодировке CP1251, то с этим должна разобраться программа, в которой вы читаете этот текст (Например MS Word или Applix Words).
К несчастью, действительная ситуация далека от идеала. Много программных продуктов имеют собственные идеи по поводу того, как использовать MIME.
Windows имеет возможность давать имена файлов в кодировке Unicode, поэтому пользователи могут давать осмысленные имена своим файлам. Linux, однако, не даёт полной поддержки для Unicode, поэтому если вы монтируете диск Windows VFAT, то увидите, что подобные имена состоят из вопросительных знаков и прочего мусора.
Здесь указан путь, как получить правильное преобразование:
ls /lib/modules/`uname -r`/fs/nls_*
).
mount
:
codepage=866,iocharset=koi8-rили пропишите в
/etc/fstab/
примерно такую строчку:
/dev/hdc1 /Rack vfat iocharset=koi8-r,umask=0,showexec,codepage=866,quiet 0 0для выяснения подробностей смотрите man mount.
Более подробно смотрите Documentation/filesystems/vfat.txt
в исходниках ядра Linux.
Чтобы увидеть русские буквы в именах файлов на диске Samba, в файл
/etc/smb.conf
следует добавить строчки:
[global] character set = koi8-r client code page = 866 preserve case = yes short preserve case = yes
Первые две опции указывает внутреннюю кодировку имён файловой системы (client code page) и внешнюю кодировку пользователя (character set).
Следующие две опции указывают, что надо сохранять регистр длинных и коротких имён файлов соответственно.
Это, видимо, единственный программный продукт, который требует присутствия
CP866
кодировки. Основанием является то, что CP866
- это родная
кириллическая кодовая страница DOS. Большинство программ, работающих в DOS с
кириллицей, ориентированы на CP866
.
Для консольной версии (dos
) вы должны загрузить только клавиатуру и
экранный драйвер. Большинство драйверов DOS будет прекрасно работать.
А. Беликов использует rk
драйвер А. Страхова, который работает и для
консоли, и X версии dosemu
.
Другая альтернатива -- это r
драйвер Вадима Курлянда (последняя версия
этого драйвера -- 2.0). Он прекрасно настраивается и поддерживает много
кодировок, в том числе CP866
и KOI8
. Однако он, вероятно, не будет
работать для X Window (по крайней мере, версия 1.14 не работает).
До сих пор остаётся популярной программа-кириллизатор keyrus
(например на
Украине). Кроме латиницы она умеет ещё две раскладки (их можно редактировать).
Эти русификаторы можно найти в большинстве Российских Internet архивов, например, в ftp архиве Курчатовского Института Ядерной Физики.
Кроме того, есть патч в http://www.ice.ru/~vitus/misc/, который позволяет обойтись без русификатора клавиатуры. Этот патч рекомендуется в X-ах, так как позволяет избежать двух клавиш переключения: одной в DOS, другой -- на остальном десктопе. Для работы с удалённым dosemu (по telnet/ssh/rsh) патч является необходимым условием.
Для X-овых версий dosemu
вы должны установить соответствующий X шрифт с
866-ой кодировкой. Взять можно по адресам
http://www.ice.ru/~vitus/works/x11.html, или
ftp.dosemu.org, или взять у автора
www.inp.nsk.su/~bolkhov.
Кроме шрифтов в кодировке cp866, там можно найти и другие кириллические
шрифты. Например, vga_bul8x16.pcf.gz
и vga_bul.pcf.gz
имеют кодировку
МИК (Болгария), vga_ruscii_8x16.pcf.gz имеет украинскую
"досовскую" кодировку ruscii.
Для установки шрифтов для dosemu
вы должны:
dosemu
. Если шрифт только заменяет
первоначальный шрифт vga
, то он будет опознан по умолчанию. Иначе вы
должны описать его в /etc/dosemu.conf
:
# Font to use (without filename extensions). For example: X { updatefreq 8 title "MS DOS" icon_name "xdos" font "vga-alt"}
И в заключение вы должны загрузить драйвер клавиатуры. Обратите внимание,
что вам не нужны экранные драйверы в X окне. Не все драйверы будут работать,
но, по крайней мере, два из них будут: rk
А. Страхова, и cyrkeyb
Pete
Kvitek; однако лучше воспользоваться патчем
http://www.ice.ru/~vitus/misc/.