gpt4 book ai didi

perl - 在 Perl 中打印 UTF8?

转载 作者:行者123 更新时间:2023-12-04 22:55:34 24 4
gpt4 key购买 nike

为什么添加 use utf8 pragma 会产生乱码输出(见下文),而当我不使用此 pragma 时

代码:

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 );

没有使用utf8的结果:

$VAR1 = {
'data' => 'The size is 200 μg'
};

使用 use utf8 的结果:

$VAR1 = {
'data' => "The size is 200 \x{3bc}g"
};

感谢您的任何见解

最佳答案

它不是乱码,而是标准的 Data::Dumper 转义,默认列出的“Useqq”配置选项here . Data::Dumper 专为调试而设计,因此此选项可让您查看可能无法打印的确切字符。

如果没有 use utf8;,您的字符串实际上包含该字符的 UTF-8 编码字节而不是字符本身,因为这是文件包含的内容。您可以通过检查字符串的长度来验证这一点。 use utf8; 使解释器从 UTF-8 解码源代码,包括您的文字字符串。

为了打印此类字符,需要将其编码回 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,因为它已经为您的 View 转义了这些字符。

关于perl - 在 Perl 中打印 UTF8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59885206/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com