Код шаблона, чтобы угадать кодовую страницу textfile в Perl?

Извините за вопрос моего нуба, но я не могу заставить следующий скрипт работать. Это полезный код, но я не нашел подобного работающего в сети.

use Encode;
use Encode::Guess;

open (my $fhr, "<", "$folder\\$_")
  or die "Could not open file '$folder\\$_' $!";
my $data = do { local $/; <$fhr> };
close $fhr;

# It is either cp1251 or utf-8.
my  $enc = guess_encoding ($data, qw/cp1251/ );
ref($enc) or die "Can't guess: ".$enc->name();
print "Encode = ".$enc->name()."\n";

my $decoded = decode ($enc, $data);

Консольный вывод выглядит следующим образом:

utf8 "\xCE" does not map to Unicode at double_fin.pl line 167, <$fhr> chunk 1.
Encode = utf8
Cannot decode string with wide characters at C:/Dwimperl/perl/lib/Encode.pm line 176.

Что я делаю не так? Заранее спасибо.

1 ответ

Решение

Первое сообщение

utf8 "\xCE" does not map to Unicode at double_fin.pl line 167, <$fhr> chunk 1

приходит когда perl пытается расшифровать содержимое файла double_fin.pl как UTF-8. Но файл содержит недопустимый UTF-8, поэтому вам нужно прочитать в файле, используя слой PerlIO :raw вместо использования :encoding(utf8) слой.

Смотрите также http://perldoc.perl.org/PerlIO.html.

Другие вопросы по тегам