在哪种情况下会对utf8 croak进行编码/解码?

sid*_*com 3 perl encoding decoding

这个脚本给我两次相同的输出。是否存在无法在utf8 encodedecode之间进行编码的编码say

#!/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;
Run Code Online (Sandbox Code Playgroud)

ike*_*ami 6

如果您尝试编码超出目标编码字符集范围的内容,则会发疯。

utf8是Perl用来存储72位字符的Perl特定的编码。它与UTF-8类似,但有所不同。它支持Perl支持的每个字符,因此永远不会崩溃。

另一方面,如果您要使用UTF-8,那么如果您尝试对非Unicode字符(例如chr(0x200000))进行编码,则将会崩溃。

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