在哪些情况下编码/解码utf8 croak?

时间:2012-10-05 16:02:44

标签: perl encoding decoding

这个脚本给了我两倍相同的输出。是否存在两个utf8之间encode decodesay无法生存的编码?

#!/usr/bin/env perl
use warnings;
use 5.16.1;
use Encode qw/encode decode/;

my $my_encoding = 'ISO-8859-7';
binmode STDOUT, ":encoding($my_encoding)";

my $var = "\N{GREEK SMALL LETTER TAU}";
$var .= "\N{GREEK SMALL LETTER OMEGA WITH TONOS}";
$var .= "\N{GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA}";

$var = encode( 'utf8', $var );
$var = decode( $my_encoding, $var );

say $var;

my $test = encode( 'utf8', $var, Encode::FB_CROAK );
$var = decode( 'utf8', $test, Encode::FB_CROAK  );

say $var;

1 个答案:

答案 0 :(得分:6)

如果您尝试编码超出目标编码字符集的内容,则会出现问题。

utf8是Perl用于存储72位字符的Perl特定编码。它类似于UTF-8,但它是不同的。它支持Perl支持的每个字符,所以它永远不会呱呱叫。

另一方面,如果您使用UTF-8,如果您尝试编码非Unicode字符的内容(例如chr(0x200000)),它就会嘶哑。

另请参阅::encoding(UTF-8) vs :encoding(utf8) vs :utf8