我在使用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谢谢你的进阶!
发布于 2013-05-10 14:09:26
如果要将utf8::encode($word);替换为use open qw(:std :utf8);,则实际上需要删除utf8::encode($word);。在不起作用的版本中,您将编码两次。
发布于 2013-05-10 16:20:16
如果要打印到perl希望输出utf8的文件句柄,则编码不是您想要的。
encode说取这个字符串,并给我一个字符串,其中每个字符都是输入字符串的utf8编码的一个字节。通常情况下,只有当您要以某种方式使用该字符串时才会这样做,如果需要,perl不会自动转换为utf8。
如果在编码后添加一个say length($word);,您将看到$word是9个字符,而不是原始的5个字符。
https://stackoverflow.com/questions/16484066
复制相似问题