Forum Webscript.Ru

Программирование => Perl => Тема начата: Perlita от 26 Октября 2002, 17:32:39

Название: Active State & русские буковки
Отправлено: Perlita от 26 Октября 2002, 17:32:39
Установил Perl от AcTive State (5.6). Но почему-то в результатх работы скрипта русские буковки выводятся абра-кадаброй и проверки текстовые с русским текстом не работают.. Что же делать, помогите!!
Название: Active State & русские буковки
Отправлено: КшЫуфксрук от 26 Октября 2002, 20:54:15
А откуда эти буковки берутся? И куда они выводятся? Одно можно сказать точно - Перл НИКОГДА ничего не перекодирует сам. У него вообще нет никаких ограничений на то, что лежит в строковой переменной.
Название: Active State & русские буковки
Отправлено: USE от 27 Октября 2002, 00:59:51
проблема может быть с кодировками? набираем в Блокноте? тогда и коридировка виндовая, а отображается все в досовской. мб?
Название: Active State & русские буковки
Отправлено: Perlita от 27 Октября 2002, 12:17:40
))) точно.. набрал в досовской кодировке скрипт

#! /usr/bin/perl
print"Русские буковки";

Отображается правильно. А что же делать если нужно работать с кодировкой koi8r или cp1251. Посмотрел документацию, там написано про локаль. Я так понял что в виндовсе 98 досовская локаль.. Как же ее можно сменить?
Название: Active State & русские буковки
Отправлено: КшЫуфксрук от 27 Октября 2002, 19:33:22
Что значит работать???? Перлу безразлично, в какой кодировке текст. Что есть, то он и выведет. Вопрос в том, сможет ли консоль отобразить этот текст правильно. Я, например, всегда работаю в 1251 и никаких проблем. Просто не вывожу русский текст в STDOUT. Если нужно, чтобы скрипт работал с консолью, тогда кто мешает весь текст писать в досовской кодировке? Если нужно брать текст из файлов в другой кодировке, кто мешает его перекодировать?

Локаль реально нужна только при сортировке, для функций uc и lc, а также в регэкспах для модификатора i (хотя я пока обходился без локали, а то пришлось бы каждому пользователю обяснять почему этот скрипт не работает на данном хостинге).
Название: Active State & русские буковки
Отправлено: Perlita от 28 Октября 2002, 12:33:28
КшЫуфксрук:

У меня файл в кодировке cp1251 а перл работает в досовской кодировке, как же будут сравниваться прочтенная строчка из файла со русскими строками в скрипте?

open(FU, "< file_in_cp1251.txt");
while (!eof(FU)) {
 $st=;
 if ($st eq \'пушкин а.с.\') {... }
}
close(FU);
Название: Active State & русские буковки
Отправлено: NeoNox от 28 Октября 2002, 13:59:08
Хозяйке на заметку.
Выдрано из утилиты http://www.pvdlab.net
# возращает перекодированную переменную, вызов wintokoi(<переменная>)
sub wintokoi {
    my $pvdcoderwin=shift;
    $pvdcoderwin=~ tr/\\xC0\\xC1\\xC2\\xC3\\xC4\\xC5\\xC6\\xC7\\xC8\\xC9\\xCA\\xCB\\xCC\\xCD\\xCE\\xCF\\xD0\\xD1\\xD2\\xD3\\xD4\\xD5\\xD6\\xD7\\xD8\\xD9\\xDA\\xDB\\xDC\\xDD\\xDE\\xDF\\xE0\\xE1\\xE2\\xE3\\xE4\\xE5\\xE6\\xE7\\xE8\\xE9\\xEA\\xEB\\xEC\\xED\\xEE\\xEF\\xF0\\xF1\\xF2\\xF3\\xF4\\xF5\\xF6\\xF7\\xF8\\xF9\\xFA\\xFB\\xFC\\xFD\\xFE\\xFF/\\xE1\\xE2\\xF7\\xE7\\xE4\\xE5\\xF6\\xFA\\xE9\\xEA\\xEB\\xEC\\xED\\xEE\\xEF\\xF0\\xF2\\xF3\\xF4\\xF5\\xE6\\xE8\\xE3\\xFE\\xFB\\xFD\\xFF\\xF9\\xF8\\xFC\\xE0\\xF1\\xC1\\xC2\\xD7\\xC7\\xC4\\xC5\\xD6\\xDA\\xC9\\xCA\\xCB\\xCC\\xCD\\xCE\\xCF\\xD0\\xD2\\xD3\\xD4\\xD5\\xC6\\xC8\\xC3\\xDE\\xDB\\xDD\\xDF\\xD9\\xD8\\xDC\\xC0\\xD1/;
return $pvdcoderwin;
}

sub koitowin {
    my $pvdcoderwin=shift;
    $pvdcoderwin=~ tr/\\xE1\\xE2\\xF7\\xE7\\xE4\\xE5\\xF6\\xFA\\xE9\\xEA\\xEB\\xEC\\xED\\xEE\\xEF\\xF0\\xF2\\xF3\\xF4\\xF5\\xE6\\xE8\\xE3\\xFE\\xFB\\xFD\\xFF\\xF9\\xF8\\xFC\\xE0\\xF1\\xC1\\xC2\\xD7\\xC7\\xC4\\xC5\\xD6\\xDA\\xC9\\xCA\\xCB\\xCC\\xCD\\xCE\\xCF\\xD0\\xD2\\xD3\\xD4\\xD5\\xC6\\xC8\\xC3\\xDE\\xDB\\xDD\\xDF\\xD9\\xD8\\xDC\\xC0\\xD1/\\xC0\\xC1\\xC2\\xC3\\xC4\\xC5\\xC6\\xC7\\xC8\\xC9\\xCA\\xCB\\xCC\\xCD\\xCE\\xCF\\xD0\\xD1\\xD2\\xD3\\xD4\\xD5\\xD6\\xD7\\xD8\\xD9\\xDA\\xDB\\xDC\\xDD\\xDE\\xDF\\xE0\\xE1\\xE2\\xE3\\xE4\\xE5\\xE6\\xE7\\xE8\\xE9\\xEA\\xEB\\xEC\\xED\\xEE\\xEF\\xF0\\xF1\\xF2\\xF3\\xF4\\xF5\\xF6\\xF7\\xF8\\xF9\\xFA\\xFB\\xFC\\xFD\\xFE\\xFF/;
return $pvdcoderwin;
}

# возращает перекодированную переменную, вызов wintoiso(<переменная>)
sub wintoiso {
    my $pvdcoderiso=shift;
    $pvdcoderiso=~ tr/\\xC0\\xC1\\xC2\\xC3\\xC4\\xC5\\xC6\\xC7\\xC8\\xC9\\xCA\\xCB\\xCC\\xCD\\xCE\\xCF\\xD0\\xD1\\xD2\\xD3\\xD4\\xD5\\xD6\\xD7\\xD8\\xD9\\xDA\\xDB\\xDC\\xDD\\xDE\\xDF\\xE0\\xE1\\xE2\\xE3\\xE4\\xE5\\xE6\\xE7\\xE8\\xE9\\xEA\\xEB\\xEC\\xED\\xEE\\xEF\\xF0\\xF1\\xF2\\xF3\\xF4\\xF5\\xF6\\xF7\\xF8\\xF9\\xFA\\xFB\\xFC\\xFD\\xFE\\xFF/\\xB0\\xB1\\xB2\\xB3\\xB4\\xB5\\xB6\\xB7\\xB8\\xB9\\xBA\\xBB\\xBC\\xBD\\xBE\\xBF\\xC0\\xC1\\xC2\\xC3\\xC4\\xC5\\xC6\\xC7\\xC8\\xC9\\xCA\\xCB\\xCC\\xCD\\xCE\\xCF\\xD0\\xD1\\xD2\\xD3\\xD4\\xD5\\xD6\\xD7\\xD8\\xD9\\xDA\\xDB\\xDC\\xDD\\xDE\\xDF\\xE0\\xE1\\xE2\\xE3\\xE4\\xE5\\xE6\\xE7\\xE8\\xE9\\xEA\\xEB\\xEC\\xED\\xEE\\xEF/;
return $pvdcoderiso;
}

sub isotowin {
    my $pvdcoderiso=shift;
    $pvdcoderiso=~ tr/\\xB0\\xB1\\xB2\\xB3\\xB4\\xB5\\xB6\\xB7\\xB8\\xB9\\xBA\\xBB\\xBC\\xBD\\xBE\\xBF\\xC0\\xC1\\xC2\\xC3\\xC4\\xC5\\xC6\\xC7\\xC8\\xC9\\xCA\\xCB\\xCC\\xCD\\xCE\\xCF\\xD0\\xD1\\xD2\\xD3\\xD4\\xD5\\xD6\\xD7\\xD8\\xD9\\xDA\\xDB\\xDC\\xDD\\xDE\\xDF\\xE0\\xE1\\xE2\\xE3\\xE4\\xE5\\xE6\\xE7\\xE8\\xE9\\xEA\\xEB\\xEC\\xED\\xEE\\xEF/\\xC0\\xC1\\xC2\\xC3\\xC4\\xC5\\xC6\\xC7\\xC8\\xC9\\xCA\\xCB\\xCC\\xCD\\xCE\\xCF\\xD0\\xD1\\xD2\\xD3\\xD4\\xD5\\xD6\\xD7\\xD8\\xD9\\xDA\\xDB\\xDC\\xDD\\xDE\\xDF\\xE0\\xE1\\xE2\\xE3\\xE4\\xE5\\xE6\\xE7\\xE8\\xE9\\xEA\\xEB\\xEC\\xED\\xEE\\xEF\\xF0\\xF1\\xF2\\xF3\\xF4\\xF5\\xF6\\xF7\\xF8\\xF9\\xFA\\xFB\\xFC\\xFD\\xFE\\xFF/;
return $pvdcoderiso;
}

# возращает перекодированную переменную, вызов wintodos(<переменная>)
sub wintodos {
    my $pvdcoderdos=shift;
    $pvdcoderdos=~ tr/\\xC0\\xC1\\xC2\\xC3\\xC4\\xC5\\xC6\\xC7\\xC8\\xC9\\xCA\\xCB\\xCC\\xCD\\xCE\\xCF\\xD0\\xD1\\xD2\\xD3\\xD4\\xD5\\xD6\\xD7\\xD8\\xD9\\xDA\\xDB\\xDC\\xDD\\xDE\\xDF\\xE0\\xE1\\xE2\\xE3\\xE4\\xE5\\xE6\\xE7\\xE8\\xE9\\xEA\\xEB\\xEC\\xED\\xEE\\xEF\\xF0\\xF1\\xF2\\xF3\\xF4\\xF5\\xF6\\xF7\\xF8\\xF9\\xFA\\xFB\\xFC\\xFD\\xFE\\xFF/\\x80\\x81\\x82\\x83\\x84\\x85\\x86\\x87\\x88\\x89\\x8A\\x8B\\x8C\\x8D\\x8E\\x8F\\x90\\x91\\x92\\x93\\x94\\x95\\x96\\x97\\x98\\x99\\x9A\\x9B\\x9C\\x9D\\x9E\\x9F\\xA0\\xA1\\xA2\\xA3\\xA4\\xA5\\xA6\\xA7\\xA8\\xA9\\xAA\\xAB\\xAC\\xAD\\xAE\\xAF\\xE0\\xE1\\xE2\\xE3\\xE4\\xE5\\xE6\\xE7\\xE8\\xE9\\xEA\\xEB\\xEC\\xED\\xEE\\xEF/;
return $pvdcoderdos;
}

sub dostowin {
    my $pvdcoderdos=shift;
    $pvdcoderdos=~ tr/\\x80\\x81\\x82\\x83\\x84\\x85\\x86\\x87\\x88\\x89\\x8A\\x8B\\x8C\\x8D\\x8E\\x8F\\x90\\x91\\x92\\x93\\x94\\x95\\x96\\x97\\x98\\x99\\x9A\\x9B\\x9C\\x9D\\x9E\\x9F\\xA0\\xA1\\xA2\\xA3\\xA4\\xA5\\xA6\\xA7\\xA8\\xA9\\xAA\\xAB\\xAC\\xAD\\xAE\\xAF\\xE0\\xE1\\xE2\\xE3\\xE4\\xE5\\xE6\\xE7\\xE8\\xE9\\xEA\\xEB\\xEC\\xED\\xEE\\xEF/\\xC0\\xC1\\xC2\\xC3\\xC4\\xC5\\xC6\\xC7\\xC8\\xC9\\xCA\\xCB\\xCC\\xCD\\xCE\\xCF\\xD0\\xD1\\xD2\\xD3\\xD4\\xD5\\xD6\\xD7\\xD8\\xD9\\xDA\\xDB\\xDC\\xDD\\xDE\\xDF\\xE0\\xE1\\xE2\\xE3\\xE4\\xE5\\xE6\\xE7\\xE8\\xE9\\xEA\\xEB\\xEC\\xED\\xEE\\xEF\\xF0\\xF1\\xF2\\xF3\\xF4\\xF5\\xF6\\xF7\\xF8\\xF9\\xFA\\xFB\\xFC\\xFD\\xFE\\xFF/;
return $pvdcoderdos;
}