2015-07-24 4 views
0

Извините за мой вопрос noob, но я не могу сделать следующий скрипт. Это полезный мир кода, но я не нашел аналогичного рабочего в сети.Код шаблона для угадывания текстовой кодовой страницы в 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

Похоже, первое сообщение приходит, когда perl пытается декодировать содержимое файла 'double_fin.pl' как UTF-8? Возможно, вам стоит попробовать прочитать файл, используя слой PerlIO ': raw' вместо использования слоя': utf8'? –

+0

@ HåkonHægland, open (my $ fhr, "<: raw", "$ folder \\ $ _") ... Кажется, он работает: никаких предупреждений, ошибок нет. Спасибо. –

+0

Отлично! Добро пожаловать. –

ответ

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.

 Смежные вопросы

  • Нет связанных вопросов^_^