#!/usr/bin/perl
use Encode;
use Encode::Guess qw/utf-8 euc-cn gbk utf-16le/;
$string="出征进行曲";
$decoder = guess_encoding($string);
$info=$decoder->decode($string);
print "$info\n";
這個 test.pl 保存成 utf8 txt檔案,執行,出錯:
Can't locate object method "decode" via package "utf-8-strict or
utf8" (perhaps you forgot to load "utf-8-strict or utf8"?) at ./
test.pl line 6.
按照網上的例子和官方說明,Encode::Guess是這樣用的沒錯啊,怎麼回事呢?
高人讲得清晰。
另最后一段的\xFF是否指\x80 ?
----------------------------------
msm...@ir.hit.edu.cn
msm...@gmail.com
#!/usr/bin/perl
use Encode;
use Encode::Guess qw/utf8 euc-cn gbk utf-16le/;
$string="出征进行曲";
$string=decode_utf8($string);
$string=encode('gbk',$string);
print $string;
$decoder=guess_encoding($string);
$info=$decoder->decode($string);
print "$info\n";
这里运行的错误仍然如下:
Can't locate object method "decode" via package "euc-cn or cp936 or
UTF-16LE" (perhaps you forgot to load "euc-cn or cp936 or UTF-16LE"?)
at ./test.pl line 9.
> 2009/3/19 Okàjn <okajn...@gmail.com>
>
> > 这么写本身就有点问题吧,encode实际是str2bytes,
>
> > $string = "出征进行曲";
> > 代码里明文写出的字符串就是以bytes存在$string中,不应该对$string再encode
>
> > 2009/3/19 Calvin <calvin.n...@gmail.com>
2009/3/20 Calvin <calvi...@gmail.com>:
> 可是,即使用 $string=decode_utf8($string) 先标记让perl明白它是一个字串,用 Encode::Guess 猜编
> 码仍然出错,比如下面的脚本:
>
> #!/usr/bin/perl
> use Encode;
> use Encode::Guess qw/utf8 euc-cn gbk utf-16le/;
> $string="出征进行曲";
> $string=decode_utf8($string);
> $string=encode('gbk',$string);
> print $string;
> $decoder=guess_encoding($string);
> $info=$decoder->decode($string);
> print "$info\n";
>
> 这里运行的错误仍然如下:
> Can't locate object method "decode" via package "euc-cn or cp936 or
> UTF-16LE" (perhaps you forgot to load "euc-cn or cp936 or UTF-16LE"?)
> at ./test.pl line 9.
>=head1 说明我稍微改了下你的脚本,你看看=cutuse Encode;# 可能的编码个数越少越好,我不清楚euc-cn和gbk是什么关系,有人知道么?
Standard DOS/Win Macintosh Comment/Reference
----------------------------------------------------------------
euc-cn [1] MacChineseSimp
(gbk) cp936 [2]
gb12345-raw { GB12345 without CES }
gb2312-raw { GB2312 without CES }
hz
iso-ir-165
----------------------------------------------------------------
[1] GB2312 is aliased to this. See L<Microsoft-related naming mess>
[2] gbk is aliased to this. See L<Microsoft-related naming mess>