Как читать в ISO 8859-1 (Latin-1) кодированный текст на Perl - PullRequest
7 голосов
/ 19 ноября 2010

Итак, я пытаюсь написать Perl-скрипт для чтения в файл, закодированный в Latin-1. По какой-то причине это просто не работает. Когда я пытаюсь выполнить простой поиск символа, который, как я знаю, находится в файле (он находится в первой строке), ничего не появляется. Я использую используйте кодировку "iso 8859-1"; ниже, но я также попробовал binmode (STDIN, ": utf8"); . Любые предложения о том, что я могу делать неправильно, и как сделать это правильно?

use encoding "iso 8859-1";

while(<>)
{
    if(/ó/gi)
    {
    print "Found one!\n";
    }
}

1 Ответ

15 голосов
/ 19 ноября 2010

Не используйте прагму use encoding: она не работает.

Либо укажите здесь кодировку:

use open ":encoding(Latin1)";

, либо поместите ее в самом открытии:

open(FH, "< :encoding(Latin1)", $pathname)
   || die "can't open $pathname: $!";

или binmode после открытия:

binmode(FH, ":encoding(Latin1)")
   || die "can't binmode to encoding Latin1";

Если вы используете <ARGV>, тогда use open, вероятно, самый простой.

Не забудьте установитькодировка в ваших выходных потоках тоже.

...