为什么添加use utf8杂注会产生乱码输出(见下文),而不使用该杂注
代码:
use strict;
use v5.10;
use Data::Dumper;
# if I comment this line out, then the results print fine
use utf8;
my $s = {
'data' => 'The size is 200 μg'
};
say Dumper( $s );不使用use utf8的结果
$VAR1 = {
'data' => 'The size is 200 μg'
};使用use utf8的结果
$VAR1 = {
'data' => "The size is 200 \x{3bc}g"
};感谢您的见解
发布于 2020-01-24 02:48:59
它不是乱码,而是一个标准的Data::Dumper转义,默认的"Useqq“配置选项列出了here。Dumper是为调试而设计的,因此该选项允许您查看字符可能无法打印时的确切内容。
如果没有use utf8;,您的字符串实际上包含该字符的UTF8编码字节,而不是字符本身,因为这是文件包含的字节。可以通过检查字符串的长度来验证这一点。use utf8;使解释器解码来自UTF8的源代码,包括您的文字字符串。
为了打印这样的字符,需要将其编码回UTF-8字节。您可以直接执行此操作:
use strict;
use warnings;
use utf8;
use Encode 'encode';
print encode 'UTF-8', 'The size is 200 μg';或者,您可以在STDOUT上设置编码层,以便将所有打印文本都编码为UTF-8:
use strict;
use warnings;
use utf8;
binmode *STDOUT, ':encoding(UTF-8)';
print 'The size is 200 μg';对于Data::Dumper调试,通常不需要对UTF-8进行编码,因为它已经为您的视图转义了这些字符。
https://stackoverflow.com/questions/59885206
复制相似问题