为什么 encode 会删除参数?
Why does encode delete the argument?
为什么 encode
删除传递的参数,如果 CHECK
设置为真值?
#!/usr/bin/env perl
use warnings;
use strict;
use utf8;
use Encode;
my $decoded = 'h';
if ( eval { encode( 'utf-8', $decoded, 1 ); 1 } ) {
print "|$decoded|\n"; # prints ||
}
它用于重复将数据块传递给 encode
或 decode
的情况。这个想法是该函数将删除它已翻译的字符串部分,您只需将下一个块附加到剩下的部分。它对于处理可能分为两个块的多字节编码很有用。
如果您不希望出现这种情况,则可以将 Encode::LEAVE_SRC
位或运算符放入第三个参数中。像这样
use utf8;
use strict;
use warnings;
use Encode qw/ encode decode FB_CROAK LEAVE_SRC /;
use Data::Dump;
my $decoded = 'ABC';
dd $decoded;
my $encoded = encode( 'UTF-8', $decoded, FB_CROAK | LEAVE_SRC );
dd $decoded;
dd $encoded;
输出
"ABC"
"ABC"
"ABC"
为什么 encode
删除传递的参数,如果 CHECK
设置为真值?
#!/usr/bin/env perl
use warnings;
use strict;
use utf8;
use Encode;
my $decoded = 'h';
if ( eval { encode( 'utf-8', $decoded, 1 ); 1 } ) {
print "|$decoded|\n"; # prints ||
}
它用于重复将数据块传递给 encode
或 decode
的情况。这个想法是该函数将删除它已翻译的字符串部分,您只需将下一个块附加到剩下的部分。它对于处理可能分为两个块的多字节编码很有用。
如果您不希望出现这种情况,则可以将 Encode::LEAVE_SRC
位或运算符放入第三个参数中。像这样
use utf8;
use strict;
use warnings;
use Encode qw/ encode decode FB_CROAK LEAVE_SRC /;
use Data::Dump;
my $decoded = 'ABC';
dd $decoded;
my $encoded = encode( 'UTF-8', $decoded, FB_CROAK | LEAVE_SRC );
dd $decoded;
dd $encoded;
输出
"ABC"
"ABC"
"ABC"