Страница 1 из 1
Русская р в perl
Добавлено: 07 окт 2005, 13:52
phaoost
натолкнулся на странный глюк. если слово содержит маленькую русскую р, то /\w+/ станоситься false. пришлось вставлять \xf0. протестил все остальные русские буквы - тот же эффект на 'э'. с остальными - всё нормально. LC_TIME="ru_RU". поставил ru_RU.CP1251 - всё стало нормально. в чём проблема с ru_RU?
Добавлено: 07 окт 2005, 14:02
Llama
ru_RU - это с какой кодировкой-то? Бывает koi,iso,cp1251,utf8?
Добавлено: 07 окт 2005, 14:45
phaoost
не знаю. дефолтная

вот и вопрос - что же оно по дефолту ставит, если все русские, кроме двух, корректно определяются.
Добавлено: 07 окт 2005, 21:30
red f0x
гы, подземный стук, типа?
(А ваще в linux, и вероятно, не только в нём, по умолчанию кодировка koi8-r, наерно предлагается при конфигурации console-cyrillic?)

(лично я не помню уже что она (console-cyrillic) там мне пыталась по своему усмотрению подсунуть - дело то, кажися в ней?)
Добавлено: 10 окт 2005, 17:07
Eugene
<b>phaoost</b>, а в скрипте поддержка локали включена?
Добавлено: 10 окт 2005, 21:06
phaoost
Eugene, отож. просто я её включал как ru_RU и происходила описанная весчь. включил как ru_RU.CP1251 b всё прекратилось. любопытно, почему так было.
Добавлено: 11 окт 2005, 15:19
Eugene
Есть предположение.
Когда ты указывал локаль ru_RU perl мог брать какую-нибудь русскую локаль, но не CP1251. Для этой локали символы с кодами, соответствующими символам "р" и "э" могут и не являться alphanumeric'ами (поэтому и не матчатся \w). Чтобы выяснить точно, нужно узнать какая локаль берется перлом при указании ru_RU и посмотреть файл этой локали на предмет символов с кодами, соотв. "р" и "э" в CP1251.
Добавлено: 11 окт 2005, 15:48
Llama
use locale есть ? perldoc locale прочитан?
Добавлено: 11 окт 2005, 15:55
bazil
что написано в locales.build то и собрано имхо
Добавлено: 11 окт 2005, 16:09
Eugene
Согласен с Llama.
phaoost, поясни как ты в перле юзаешь поддержку локали?
Надо ее просто включить через use locale. А ты похоже делаешь setlocale, что ни есть правильно.
А вообще-то на работу регекспов LC_TIME влиять не должен никак, влияет LC_CTYPE.
Добавлено: 11 окт 2005, 22:35
phaoost
в исходнике:
use locale;
setlocale (LC_CTYPE,"ru_RU");
Eugene, про LC_TIME попутал.
Добавлено: 12 окт 2005, 01:15
Llama
phaoost, ru_RU - это сферический конь в вакууме. то, что является \w для koi8 не обязано быть тем же самым
w для cp1251. просто посмотри на этой системе, куда в локалях указывает симлинк ru_RU.