Мне дали файл, (вероятно) закодированный в Latin-1 (ISO 8859-1), и с ним нужно выполнить некоторые преобразования и интеллектуальный анализ данных. Предполагается, что вывод должен быть в UTF-8, и я пробовал все, что мог найти о преобразовании кодировки в Perl, ни один из них не дал никакого полезного вывода.
Я знаю, что use utf8;
с самого начала ничего не делает. Я попробовал пакет Encode
, который выглядел многообещающе:
open FILE, '<', $ARGV[0] or die $!;
my %tmp = ();
my $last_num = 0;
while (<FILE>) {
$_ = decode('ISO-8859-1', encode('UTF-8', $_));
chomp;
next unless length;
process($_);
}
Я пробовал это в любой комбинации, которую мог придумать, а также добавлял binmode(STDOUT, ":utf8");
, open FILE, '<:encoding(ISO-8859-1)', $ARGV[0] or die $!;
и многое другое. Результатом были либо зашифрованные умляуты, либо сообщение об ошибке типа \xC3 is not a valid UTF-8 character
, либо даже смешанный текст (некоторые в UTF-8, некоторые в Latin-1).
Все, что мне нужно, это простой способ чтения текстового файла Latin-1 и создания вывода UTF-8 на консоли через print
. Есть ли простой способ сделать это в Perl?