为什么encode删除传递的参数,如果CHECK设置为true值?
#!/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 ||
}
Run Code Online (Sandbox Code Playgroud)
它适用于您反复将数据块传递给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;
Run Code Online (Sandbox Code Playgroud)
产量
"ABC"
"ABC"
"ABC"
Run Code Online (Sandbox Code Playgroud)