Forum Webscript.Ru

Программирование => Perl => Тема начата: George S. от 04 Февраля 2005, 13:33:44

Название: setlocale (LS_ALL, <DOS Russian>) КАК?
Отправлено: George S. от 04 Февраля 2005, 13:33:44
Как в скрипте выставить досовскую локаль (использую ActivePerl 5.8 Win) ?


use locale;
use POSIX \'locale_h\';

setlocale(LC_ALL,"ru_RU.cp1251");

$st=\'Как Найти тект\';
if ($st=~m/найти/i) {
  print"Find!\\n";}



Данный скрипт работает для кодировки cp1251. Проблема - нужно работать с русским текстом в досовской кодировке. Вариант замены строки на нижний регистр работает, но хотелось бы обойтись без него.
Название: setlocale (LS_ALL, <DOS Russian>) КАК?
Отправлено: Phoinix от 04 Февраля 2005, 13:41:50
George S.
Цитировать
Данный скрипт работает для кодировки cp1251

Цитировать
setlocale(LC_ALL,"ru_RU.cp1251");


Логично. Может поставить cp866 или 866???
Название: setlocale (LS_ALL, <DOS Russian>) КАК?
Отправлено: George S. от 04 Февраля 2005, 13:53:47
Конечно я пробывал и cp866 и другие - но не помогает
Название: setlocale (LS_ALL, <DOS Russian>) КАК?
Отправлено: AnnA от 04 Февраля 2005, 15:18:45
Цитировать
George S.:
Конечно я пробывал и cp866 и другие

но при этом Вы и $st=\'Как Найти тект\'; набираете в DOS-кодировке, или делаете поиск в файле, в котором текст набран именно в DOS-кодировке?
Название: setlocale (LS_ALL, <DOS Russian>) КАК?
Отправлено: George S. от 06 Февраля 2005, 00:14:27
AnnA
для кодировки cp1251 текст набран в win кодировке, для доса именно в досовской кодировке.
А если конкретно - то да, нужно искать строчки, читаемые из файла в досовской кодировке.

неужели единственный выход - переводить проверяемые строчки в нижний регистр - этонесколько неубодно..
Название: setlocale (LS_ALL, <DOS Russian>) КАК?
Отправлено: NeoNox от 06 Февраля 2005, 21:05:11
George S. 12.3
http://isabase.philol.msu.ru/~apavel/ruperl/ru-perl-faq-12.html
Название: setlocale (LS_ALL, <DOS Russian>) КАК?
Отправлено: George S. от 07 Февраля 2005, 10:25:34
NeoNox
 Попробывал...


use locale;
  use POSIX;
  &POSIX::setlocale(&POSIX::LC_ALL, "Russian_Russia.866");
  print uc "Да, здесь будут заглавные буквы";


Не работает как надо ... выдает:

Да, зде+¦ б+д+T заглабнTе б+кбT


Наверна у ActiveState Перл такой кривой -) .
Название: setlocale (LS_ALL, <DOS Russian>) КАК?
Отправлено: arto от 07 Февраля 2005, 11:32:58
setlocale (...) or die "this locale doesn\'t support"
Название: setlocale (LS_ALL, <DOS Russian>) КАК?
Отправлено: George S. от 08 Февраля 2005, 10:21:28
&POSIX::setlocale(&POSIX::LC_ALL, "Russian_Russia.866") or die "this locale doesn\'t support"

-не выдает ошибок
Название: setlocale (LS_ALL, <DOS Russian>) КАК?
Отправлено: AnnA от 11 Февраля 2005, 12:09:07
тогда, может есть смысл один раз сконвертировать текст dos2win да и работать с ним?
а Вы не пробовали работу скрипта на хостере, т.е. под *nix - у меня такое раньше вот с ГД было ;) - локально под виндой шрифтов в упор не видит (не говоря уж о кодировке), а на сайте в сети всё замечательно работает.