Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Linux и кириллица   Pavel Fedin   27 Mar 2004 12:56:30 
 Re: Linux и кириллица   Artem Chuprina   29 Mar 2004 16:04:35 
 Re: Linux и кириллица   Kirill Frolov   01 Apr 2004 20:52:06 
 Re: Linux и кириллица   Igor Nikolaev   12 Apr 2004 01:42:19 
 Re: Linux и кириллица   Pavel Fedin   23 May 2004 19:45:11 
 Re: Linux и кириллица   Kirill Frolov   25 May 2004 01:58:17 
 Re: Linux и кириллица   Serg Oskin   25 May 2004 10:10:07 
 Re: Linux и кириллица   Pavel Fedin   10 Jun 2004 22:15:55 
 Re: Linux и кириллица   Kirill Frolov   13 Jun 2004 09:46:10 
Архивное /ru.linux/3833fc757175.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional