首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Perl中打印UTF8?

在Perl中打印UTF8?
EN

Stack Overflow用户
提问于 2020-01-24 02:42:14
回答 1查看 349关注 0票数 3

为什么添加use utf8杂注会产生乱码输出(见下文),而不使用该杂注

代码:

代码语言:javascript
复制
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的结果

代码语言:javascript
复制
$VAR1 = {
          'data' => 'The size is 200 μg'
        };

使用use utf8的结果

代码语言:javascript
复制
$VAR1 = {
          'data' => "The size is 200 \x{3bc}g"
        };

感谢您的见解

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-24 02:48:59

它不是乱码,而是一个标准的Data::Dumper转义,默认的"Useqq“配置选项列出了here。Dumper是为调试而设计的,因此该选项允许您查看字符可能无法打印时的确切内容。

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

为了打印这样的字符,需要将其编码回UTF-8字节。您可以直接执行此操作:

代码语言:javascript
复制
use strict;
use warnings;
use utf8;
use Encode 'encode';
print encode 'UTF-8', 'The size is 200 μg';

或者,您可以在STDOUT上设置编码层,以便将所有打印文本都编码为UTF-8:

代码语言:javascript
复制
use strict;
use warnings;
use utf8;
binmode *STDOUT, ':encoding(UTF-8)';
print 'The size is 200 μg';

对于Data::Dumper调试,通常不需要对UTF-8进行编码,因为它已经为您的视图转义了这些字符。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59885206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档