Здравствуйте, Евгений. Вы посоветовали > - print "enc = $enc\n"; > + print "enc = ", $enc->name, "\n" при использовании Encode::Guess.
$enc->name не работает вообще, а вот $enc возвращает правильную кодировку, но только в случае UTF-8, а в случае cp1251 возвращает enc = Encode::XS=SCALAR(0x8590054) Подробнее. Следующий кусок кода: my $enc = guess_encoding( $data, qw/euc-jp shiftjis 7bit-jis UTF-8 utf-8 ascii cp1251/ ); print "enc = ".$enc->name."\n"; создаёт такое сообщение: Can't locate object method "name" via package "utf-8-strict or utf8" (perhaps you forgot to load "utf-8-strict or utf8"?) at ./try2guess.pl line 41. При этом вот такой вот кусок кода # $data содержит текст в utf-8 my $enc = guess_encoding( $data, qw/euc-jp shiftjis 7bit-jis UTF-8 utf-8 ascii cp1251/ ); print "enc = ".$enc."\n"; правильно определяет кодировку файла UTF-8 и печатает то, что надо: enc = utf-8-strict or utf8 Этот же самый кусок кода # $data содержит текст в cp1251 my $enc = guess_encoding( $data, qw/euc-jp shiftjis 7bit-jis UTF-8 utf-8 ascii cp1251/ ); print "enc = ".$enc."\n"; не может определить кодировку cp1251 и пишет enc = Encode::XS=SCALAR(0x8590054) 17 декабря 2010 г. 17:09 пользователь Evgeniy Kosov <[email protected]> написал: > On 17.12.2010 16:17, Dmitry Arsentiev wrote: >> >> Вот код. >> #!/usr/bin/perl >> use strict; >> use warnings; >> use Encode; >> use Encode::Guess; >> >> my $filename = "kmm157.txt"; >> open my $fh, "<", $filename or die "can not open file $filename for >> reading \n"; >> my $data = do{ local $/;<$fh> }; >> close $fh; >> >> my $enc = guess_encoding( $data, qw/euc-jp shiftjis 7bit-jis utf-8 >> ascii cp1251/ ); >> >> print "enc = $enc\n"; > > - print "enc = $enc\n"; > + print "enc = ", $enc->name, "\n" > -- > Moscow.pm mailing list > [email protected] | http://moscow.pm.org > -- Moscow.pm mailing list [email protected] | http://moscow.pm.org
