Forum Webscript.Ru
Программирование => Perl => Тема начата: Perlita от 26 Октября 2002, 17:32:39
-
Установил Perl от AcTive State (5.6). Но почему-то в результатх работы скрипта русские буковки выводятся абра-кадаброй и проверки текстовые с русским текстом не работают.. Что же делать, помогите!!
-
А откуда эти буковки берутся? И куда они выводятся? Одно можно сказать точно - Перл НИКОГДА ничего не перекодирует сам. У него вообще нет никаких ограничений на то, что лежит в строковой переменной.
-
проблема может быть с кодировками? набираем в Блокноте? тогда и коридировка виндовая, а отображается все в досовской. мб?
-
))) точно.. набрал в досовской кодировке скрипт
#! /usr/bin/perl
print"Русские буковки";
Отображается правильно. А что же делать если нужно работать с кодировкой koi8r или cp1251. Посмотрел документацию, там написано про локаль. Я так понял что в виндовсе 98 досовская локаль.. Как же ее можно сменить?
-
Что значит работать???? Перлу безразлично, в какой кодировке текст. Что есть, то он и выведет. Вопрос в том, сможет ли консоль отобразить этот текст правильно. Я, например, всегда работаю в 1251 и никаких проблем. Просто не вывожу русский текст в STDOUT. Если нужно, чтобы скрипт работал с консолью, тогда кто мешает весь текст писать в досовской кодировке? Если нужно брать текст из файлов в другой кодировке, кто мешает его перекодировать?
Локаль реально нужна только при сортировке, для функций uc и lc, а также в регэкспах для модификатора i (хотя я пока обходился без локали, а то пришлось бы каждому пользователю обяснять почему этот скрипт не работает на данном хостинге).
-
КшЫуфксрук:
У меня файл в кодировке cp1251 а перл работает в досовской кодировке, как же будут сравниваться прочтенная строчка из файла со русскими строками в скрипте?
open(FU, "< file_in_cp1251.txt");
while (!eof(FU)) {
$st=;
if ($st eq \'пушкин а.с.\') {... }
}
close(FU);
-
Хозяйке на заметку.
Выдрано из утилиты 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;
}