ДНЕВНИКИ
Назад >>
Сергей ШИБКА
>>
CentOS
31.08.2012 CentOS 5.x и добавление локали cp1251
Возникла проблема при написание perl скрипта сортировки кириллических имён. А конкретно, если в именах встречается буква ё или Ё, эта буква встает первой и нарушается порядок сортировки.
Проверяем комнду в консоле:
locale
Видим результат:
LANG=ru_RU.UTF-8
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=
Проверяем комнду в консоле:
locale -a | grep ru
Видим результат:
ru_RU
ru_RU.iso88595
ru_RU.koi8r
ru_RU.utf8
russian
ru_UA
ru_UA.koi8u
ru_UA.utf8
Отсутствует нужная нам локаль ru_RU.cp1251
Выполняем:
localedef -f CP1251 -i ru_RU /usr/lib/locale/ru_RU.cp1251
Должна появиться директория с набором файлов нашей локали.
Выполняем:
locale -a | grep ru
Получаем результат:
ru_RU
ru_RU.cp1251
ru_RU.iso88595
ru_RU.koi8r
ru_RU.utf8
russian
ru_UA
ru_UA.koi8u
ru_UA.utf8
Видим, что локаль ru_RU.cp1251 есть.
Теперь её можно подключить в perl скрипте:
use POSIX;
POSIX::setlocale (&POSIX::LC_ALL, "ru_RU.cp1251");
use locale;
После чего волшебным образом сортировка заработала как хотелось :-)
P.S. Если захочеться, то можно и в консоли переключить с utf-8 на cp1251 (но это как кому удобно).
Выполняем:
export LANG=ru_RU.cp1251
Далее необходимо поправить файл /etc/sysconfig/i18n для выбора корректной локали:
Добавлем в него строчки для cp1251:
LANG="ru_RU.cp1251"
SUPPORTED="ru_RU.cp1251:ru_RU:ru"
SYSFONT="latarcyrheb-sun16"
Для utf-8 закоментировать строчки:
LANG="ru_RU.UTF-8"
SUPPORTED="ru_RU.UTF-8:ru_RU:ru"
SYSFONT="latarcyrheb-sun16"
И перезапустить консоль.
• комментарии (0)
[ Назад ]
|