[Moscow.pm] Подскажите пожалуйста, как определить кодировку файла? Надо уметь различать UTF-8, cp1251. Encode::Guess не детектит cp1251.

Dmitry Arsentiev dmarsentev на gmail.com
Пт Дек 17 08:17:53 PST 2010


Здравствуйте, Евгений.

Вы посоветовали
> - 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 <evgeniy на kosov.su> написал:
> 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
> moscow-pm на pm.org | http://moscow.pm.org
>


Подробная информация о списке рассылки Moscow-pm