使用pragma utf8::encode
use open qw(:std :utf8);
出现问题
示例
#!/usr/bin/env perl
use v5.16;
use utf8;
use open qw(:std :utf8);
use Data::Dumper;
my $word = "+банк";
say Dumper($word);
say utf8::is_utf8($word) ? 1 : 0;
utf8::encode($word);
say Dumper($word);
say utf8::is_utf8($word) ? 1 : 0;
输出
$VAR1 = "+\x{431}\x{430}\x{43d}\x{43a}";
1
$VAR1 = '+банк';
0
当我删除此编译指示use open qw(:std :utf8);
时,一切正常。
$VAR1 = "+\x{431}\x{430}\x{43d}\x{43a}";
1
$VAR1 = '+банк';
0
先谢谢你了!
答案 0 :(得分:6)
如果您要将utf8::encode($word);
替换为use open qw(:std :utf8);
,则实际上您需要删除utf8::encode($word);
。在不起作用的版本中,您将进行两次编码。
答案 1 :(得分:2)
utf8 :: encode是而不是你想要的。
utf8 :: encode表示取这个字符串并给我一个字符串,其中每个字符都是输入字符串的utf8编码的一个字节。这通常只有在你以某种方式使用该字符串时才会这样做,其中perl 不会在必要时自动转换为utf8。
如果您在编码后添加say length($word);
,您会看到$ word是9个字符,而不是原来的5个字符。