如何使用open pragma的utf8编码

时间:2013-05-10 14:01:47

标签: perl utf-8 character-encoding

使用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

先谢谢你了!

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:2)

如果要打印到perl期望输出utf8的文件句柄,

utf8 :: encode是而不是你想要的。

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

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