2

utf8::encode在使用 pragma 时遇到问题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

当我删除这个 pragmause open qw(:std :utf8);时,一切正常。

$VAR1 = "+\x{431}\x{430}\x{43d}\x{43a}";
1
$VAR1 = '+банк';
0

提前谢谢你!

4

2 回答 2

6

如果要替换utf8::encode($word);use open qw(:std :utf8);,则实际上需要删除utf8::encode($word);. 在不起作用的版本中,您要编码两次。

于 2013-05-10T14:09:26.750 回答
2

如果您要打印到 perl 期望输出 utf8 的文件句柄,则utf8::encode不是您想要的。

utf8::encode 说取这个字符串并给我一个字符串,其中每个字符都是输入字符串的 utf8 编码的一个字节。这通常只有在您以某种方式使用该字符串时才会这样做,如果必要,perl不会自动转换为 utf8。

如果你say length($word);在编码后加一个,你会看到 $word 是 9 个字符,而不是原来的 5 个。

于 2013-05-10T16:20:16.873 回答