|
| ||||||||||||
| ||||||||||||
12. Совместимость
Следовать стандарту -- это еще не все. В реальной жизни надо обеспечить еще и обратную совместимость. В нашем случае это означает, что наши настройки не должны препятствовать созданию данных с помощью других кодировок, отличных от стандартной. Это могут быть данные в Alt (cp866) или в cp1251. Также должна быть возможность запускать русскоязычные программы из MS-DOS. В большинстве случаев (кроме HTTP) достаточно обеспечить преобразование данных в KOI8-R. Если мы говорим о данных с простой структурной организацией, то это просто -- смотрите раздел Символьная перекодировка.
Другое дело -- данные с определенной структурой. В этом случае действия не так тривиальны. Я попробую описать стандартные подходы для решения этой проблемы.
12.1 Совместимость данных в MIME формате
MIME формат -- стандартное архитектурно-независимое представление
данных. Первоначально это представление данных было разработано для
письменных сообщений, а сейчас его используют и в других местах. Стандарт
MIME определяет формат, который открыт для расширений и позволяет
поддержку и работу со специфическими данными. Например, если я послал
письмо, содержащее MIME объект Большинство UNIX программ, предлагающих MIME сервис, для этих целей
используют пакет Поэтому, если вы получили поток MIME данных, содержащий текст в одной из устаревших кодировок, вы можете определить соответствующие MIME-директивы для конвертации такого текста в KOI8. Ниже перечислены MIME-законы, которые описывают правила работы с обычными текстами и текстами в richtext формате, использующих другие кодировки, отличные от KOI8. Вы можете вставить эти директивы в один из файлов конфигурации MIME. Обратите внимание: Эти директивы используют пакет
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. До недавнего времени Microsoft Mail использовал испорченный механизм работы с MIME. Хотя и Netscape Navigator/Communicator клиент отправки/приема сообщений известен тем, что шлет текст письма в cp1251, а его заголовок в charset=koi8-r кодировке и наоборот. Довольно часто случается так, что те, кто посылают
вам письма, неправильно настраивают (или не настраивают вообще,
а по умолчанию стоит черте-че -- пример Outlook) свои почтовые
программы. В заголовках писем вместо
:0 fHw * ^Content-Type: *text/plain; *charset="?(iso-8859-1|US-ASCII|UNKNOWN-8BIT)"? | formail -i "Content-Type: text/plain; charset=windows-1251"
12.2 Символьная перекодировка
В Internet можно найти множество программ, перекодирующих кириллические тексты. Каждая из них имеет свою изюминку и отличается степенью поддержки кириллицы. С моей точки зрения, утилиты должны быть стандартными. В нашем, частном, случае такой "стандартной" утилитой является GNU recode. ( http://www.iro.umontreal.ca/~pinard/recode/). Например, чтобы перекодировать из cp1251 в koi8-r, следует сказать:
$ recode CP1251..KOI8-R winfile.txt Так же широко распространены iconv (входит в поставку glibc) Опять же cp1251 в koi8-r:
$ iconv -f866 -tKOI8-R -o<outfile> infile Можно воспользоваться пакетом translit. Он поддерживает много популярных кодировок и даже способен создавать TeX файлы (см. раздел tex ) на русском языке. В конце концов сгодится обычный lynx (cp1251 в koi8-r):
$ lynx -assume_local_charset cp1251 file.txt Для других программ преобразования -- загляните на страничку
SovInformBureau
или на
ftp.funet.fi. Вы даже можете использовать специальную моду
для
12.3 Кириллические имена файлов в файловой системе MS Windows
Windows имеет возможность давать имена файлов в кодировке Unicode, поэтому пользователи могут давать осмысленные имена своим файлам. Linux, однако, не дает полной поддержки для Unicode, поэтому если вы монтируете диск Windows VFAT, то увидите, что подобные имена состоят из вопросительных знаков и прочего мусора. Здесь указан путь, как получить правильное преобразование:
Более подробно смотрите
12.4 Поддержка кириллицы в DOS эмуляторе
Это, видимо, единственный программный продукт, который требует
присутствия Для консольной версии ( Оба русификатора можно найти в большинстве Российских Internet архивов, например, в ftp архиве Курчатовского Института Ядерной Физики. Кроме того, есть патч в http://www.ice.ru/~vitus/misc/, который позволяет обойтись без русификатора клавиатуры. Этот патч рекомендуется в X-ах, так как позволяет избежать двух клавиш переключения: одной в DOS, другой -- на остальном десктопе. Для работы с удаленным dosemu (по telnet/ssh/rsh) патч является необходимым условием. Для X-овых версий Кроме шрифтов в кодировке cp866, там можно найти и другие кириллические
шрифты. Например, Для установки шрифтов для
И в заключение, вы должны загрузить драйвер клавиатуры.
Обратите внимание, что вам не нужны экранные драйверы в X окне.
Не все драйверы будут работать, но, по крайней мере,
два из них будут:
12.5 Поддержка кириллицы в программах gtk
Если gtk не находит нужных шрифтов, он режет 8-й бит.
Шрифты задаются в
style "gtk-default-ru" {
fontset = "-cronyx-helvetica-medium-r-normal--*-*-*-*-*-*-koi8-r,\
-cronyx-courier-medium-r-normal--*-*-*-*-*-*-koi8-r,\
-cronyx-fixed-medium-r-normal--*-*-*-*-*-*-koi8-r,\
-cronyx-times-medium-r-normal--*-*-*-*-*-*-koi8-r"
}
class "GtkWidget" style "gtk-default-ru"
и скопировать этот файл в
$ cd /etc/gtk/ $ ln -s gtkrc.ru gtkrc.ru_RU.KOI8-R Подробности см. www.gtk.org, а также http://www.linux.org.ru/gnome/
Вперед Назад Содержание |
|
CITForum © 1997–2025