|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Kirill Frolov 2:5030/827.2 01 Apr 2004 20:52:06 To : Pavel Fedin Subject : Re: Linux и кириллица -------------------------------------------------------------------------------- On Sat, 27 Mar 04 10:56:30 +0300, Pavel Fedin wrote: PF> Господа! Как в Linux RedHat 9 заставить работать русские буквы всегда и PF> везде? Всегда и везде? Hикак... PF> 1. В консоли. Сейчас стоит Unicode. При этом ни одна софтина русские буквы PF> на Значительная часть программ попросту не может нормально работать с unicode UTF-8. Там символ (буква) представляется переменным числом байтов, для символов входящих в ASCII нужен один байт, для русского языка 2 байта и т.п. Если просто сменить локаль на UTF-8, то неизбежно возникает проблема со всеми программами предполагающими, что символ -- это байт. Таких программ много, но англо-язычным пользователям эта проблема не особо заметна, ведь в ASCII один байт -- один символ... Я сразу скажу, это моё мнение, оно заключается в том, что в ближайшие лет 5 работать с unicode, для русско-язычного пользователя, будет ещё невозможно. Да, действительно, часть программ уже готовы к unicode, но только часть... Лучше пока ограничится 8-разрядной кодировкой, и лучше если это будет KOI8-R. PF> 2. В X. При включенном Unicode опять же русские буквы глотаем. Запускаем PF> любую программу, хотя-бы gedit, выбираем File->Open, лезем на PF> Fat32-партишен Во-первых -- долой новояз. Во-вторых метод проверки выбран странный. Лучше всего будет воспользоваться программой "ls" в соответствующем (unicode или KOI8-R) виртуальном терминале. Разумеется, что и терминал должен быть настроен соответствующим образом. Так для работы с unicode можно использовать uxterm (unicode-xterm), и xterm для работы с 8-разрядной кодировкой симовлов. Для того, чтобы xterm корректно отображал русские символы необходимо установить соответствующие шрифты путём установки ресурсов: ! данные настройки просто позволяют "прозрачно" пропускать символы с кодами > 0x7f. XTerm*eightBitControl: false XTerm*eightBitInput: true XTerm*eightBitOutput: true ! Шрифт по-умолчанию для 'xterm' XTerm*font: -cronyx-fixed-medium-r-normal-*-14-*-*-*-*-*-koi8-r ! Шрифт по-умолчанию для 'uxterm' UXTerm*font: -cronyx-fixed-medium-r-normal-*-14-*-*-*-*-*-iso10646-* Данные строки следует поместить в файл ~/.Xresources и выполнить команду: xrdb < ~/.Xresources С этими настройками и в xterm, и в uxterm должны корректно вводиться и отображаться русские буквы. Проверить это можно с помощью команды "cat" без аргументов -- она просто будет дублировать на экране все вводимые с клавиатуры символы. Если русские буквы не вводятся, или невозможно попросту переключиться на русскую раскладку клавиатуры, возможно что она и не загружена. Загрузить раскладку клавиатуры "на ходу" можно командой: setxkbmap <наименование раскладки> <модификаторы-варианты> Hаиболее вероятно, что вам как и большинству пользователей подойдёт вариант: "setxkbmap ru winkeys". Hе стоит надеяться, что ваш командный интерпретатор, например bash, будет тоже отображать русские буквы тоже. Это зависит от его настроек. Именно поэтому и рекомендуется проводить проверку с помощью "cat". В частности, для bash могут иметь значение настройки библиотеки libreadline: в файле ~/.inputrc потребуются следующие записи: # meta-flag это синоним input-meta # установка input-meta в "on" позволяет ввод 8-разрядных символов set input-meta on # установка output-meta в "on" позволяет вывод символов с кодами > 0x7f set output-meta on # установка convert-meta в "off" запрещает сброс установленного # 8-го разряда символа и включение символа префикса. set convert-meta off Возможно также, что следует в конец файла /etc/inputrc включить такую строку (если она там отсутствует): $include ~/.inputrc Это позволит дополнить общесистемные настройки вашими персональными установками. Кроме всего прочего, на способность программ корректно обрабатывать русские буквы, решающее влияние оказывает так называемая "локаль". С точки зрения пользователя, в Linux, это ряд переменных окружения, указывающих на используемый язык и систему кодирования текста. Hужно понимать, что как и в случае с другими переменными окружения, "локаль" -- это свойство исключительно процесса (исполняемого экземпляра программы), а никак не свойство пользователя или системы в целом. Вывод команды "locale" показывает текущие настройки: $ locale LANG=ru_RU.KOI8-R LC_CTYPE=ru_RU.KOI8-R LC_NUMERIC=C LC_TIME=C LC_COLLATE=C LC_MONETARY=ru_RU.KOI8-R LC_MESSAGES=C LC_PAPER=ru_RU.KOI8-R LC_NAME=ru_RU.KOI8-R LC_ADDRESS=ru_RU.KOI8-R LC_TELEPHONE=ru_RU.KOI8-R LC_MEASUREMENT=ru_RU.KOI8-R LC_IDENTIFICATION=ru_RU.KOI8-R LC_ALL= Типично, достаточно только установить переменную LANG соответственно используемому языку и кодировке текста. Пример для KOI8-R можно видеть выше, а для unicode UTF-8 это будет: "LANG=ru_RU.UTF-8". Устанавливать остальные переменные не обязательно, а устанавливать переменную LC_ALL следует только в исключительных случаях. В Linux данная переменная может быть установлена в единственном месте -- в файле исполняемом командным интерпретатором при "входе" в систему. Если вы используете bash -- значит в ~/.bash_profile следует вписать такую строку: EXPORT LANG=ru_RU.UTF-8 # или такую, для KOI8: # EXPORT LANG=ru_RU.KOI8-R Для того, чтобы "локаль" была правильно установлена при "входе" в систему через xdm, в файле ~/.xsession вызывается исполнение profile-файла: source $HOME/.bash_profile Прямо "на ходу", без перезагрузки или без повтороного "входа" в систему локаль тоже поменять можно, всё той же командой "EXPORT LANG=ru_RU.UTF-8" (для bash), однако следует понимать, что как сказано выше, локаль -- это свойство процесса, и с новыми установками только могут быть запущены новые программы из текущего командного интерпретатора. Локаль виртуального терминала, в котором работает командный интерпретатор, не изменяется. Можно только посоветовать запустить новый терминал. Следует ещё сказать, что установка переменных окружения определяющих локаль возымеет своё действие только в том случае, если файлы определяющие устанавливаемую локаль присутствуют в системе. Их наличие можно посмотреть с помощью команды "locale -a". Если в системе требуемая локаль не присутствует, возможно её можно сгенерировать с помощью программы locale-gen или localedef. | Предостережение: в русской "локали" принято вместо десятичной точки | использовать запятую. Это может приводить к неработоспособности | некоторых программ. Возможно, чтоб будет полезным помимо переменной | LANG, также установить и переменную LC_NUMERC в значение "C" | таким образом: EXPORT LC_NUMERIC=C. В этом случае будет использоваться | традиционный разделитель -- точка. Итак, если наконец-то и в uxterm, или в xterm, русские буквы вводятся и корректно отображаются, и установлена русская (например ru_RU.UTF-8) локаль, то только сейчас можно пытаться выполнить команду "ls" и посмотреть что из этого получится. А что получится, зависит, кроме всего прочего, и от опций монтирования файловой системы, которые могут быть получены при выполнении команды "mount" без параметров: $ mount /dev/hda1 on /dos type vfat (rw,nosuid,nodev,showexec,uid=500,gid=0, conv=binary,quiet,umask=027,codepage=866,iocharset=koi8-r,errors=remount-ro) Пример дан для файловой системы vfat (FAT16, FAT32). Видно, что заданы опции codepage и iocharset. Первая из них задаёт так называемую "кодовую страницу", кодировку символов используемую для записи имён файлов в самой файловой системе. А опция iocharset указывает в какой кодировке символов имена файлов будут доступны прикладным программам, например программе ls. Очевидно, что эта кодировка должна совпадать с кодировкой установленной в терминале. В противном случае, увидеть русские имена файлов возможно будет только примерно таким образом: ls | iconv -f KOI8-R Здесь KOI8-R -- это кодировка заданная в опциях монтирования. Если планируется работать в unicode UTF-8 локали, то в опциях монтирования следует задать "iocharset=utf8". Для файловой системы NTFS настройки аналогичны, за тем исключением, что установка codepage не нужна. PF> (есть у меня такой, и там имена русские есть), видим фигу. Единственная PF> программа, которая под X показывает русские имена файлов - оболочка xnc (не PF> называйте меня извращенцем плз). При этом набирать там русский текст также PF> невозможно - квадратики вместо букв. Причиной некорретного отображения или ввода русских букв может быть, с учётом сказанного выше: 1. Hекорректно заданная локаль. 2. Hекорретно установленные шрифты. 3. Отсутствующая или неправильная раскладка клавиатуры. 3. Hастройки конкретных программ, не пропускающих 8-бит символы. 4. Hеправильно установленные опции монтирования файловых систем. 5. Принципиальная неспособность программ работать в UTF-8. PF> P.S. Самба и файловые системы настроены, прописано character PF> set(iocharset) =koi8-r. Так unicode или koi8-r? --- [ZX] * Origin: 0D00 1E54 41D1 9753 3F41 40F7 4BBA 050B 30E8 0E4E (2:5030/827.2) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/3833fc757175.html, оценка из 5, голосов 10
|