首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用数据打印时不受尊重的口音::dumper

在使用数据打印时不受尊重的口音::dumper
EN

Stack Overflow用户
提问于 2014-04-01 09:28:34
回答 4查看 518关注 0票数 1

我想打印出关联数组的内容。为此,我使用的是数据::dumper。

因此,举个例子,如果关联数组名为"%w",我编写:

代码语言:javascript
复制
  print OUT Dumper(\%w);

问题是:有一些像"récente“这样的单词被打印为"r\x{e9}cente”。

如果我只写:

代码语言:javascript
复制
print OUT %w;

我没有问题,所以“简历”会被打印成“简历”。

用于脚本的所有文本文件都在utf8中。此外,我还使用了"utf8“模块,并始终指定字符编码系统。

为了前夫。:

代码语言:javascript
复制
open( IN, '<', $file_in);
binmode(IN,":utf8");

我很确定这个问题与数据有关::dumper。有没有办法解决这个或另一个方法打印一个关联数组的内容?

谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-04-01 09:48:00

这是故意的。当Data::Dumper作为Perl代码使用eval时,eval的输出将产生相同的数据结构。为了限制字符编码的效果,将使用转义符将非ASCII字符转储.此外,设置$Data::Dumper::Useqq = 1是明智的,这样就可以使用转义来转储任何不可打印的字符。

Data::Dumper并不是用来显示数据结构的一种方式--如果您有特定的格式要求,只需自己编写必要的代码即可。例如

代码语言:javascript
复制
use utf8;
use feature 'say';
open my $out, ">:utf8", $filename or die "Can't open $filename: $!";
my %hash = (
    bárewørdş => '–Uni·code–',
);

say { $out } "{";
for my $key (sort keys %hash) {
    say { $out } "  $key: $hash{$key}";
}
say { $out } "}";

产生

代码语言:javascript
复制
{
  bárewørdş: –Uni·code–
}
票数 4
EN

Stack Overflow用户

发布于 2014-04-01 09:59:15

您还可以使用Data::Dumper::AutoEncode。

代码语言:javascript
复制
use utf8;
use Data::Dumper::AutoEncode;

warn eDumper($hash_ref);

cpan数据::Dumper::AutoEncode

票数 2
EN

Stack Overflow用户

发布于 2014-04-01 09:59:59

这对我来说很管用:

代码语言:javascript
复制
use strict;
use warnings;
use Data::Dumper;
$Data::Dumper::Useperl = 1;
binmode STDOUT, ":utf8";
{ no warnings 'redefine';
    sub Data::Dumper::qquote {
        my $s = shift;
        return "'$s'";
    }
}
my $s = "rcente\x{3a3}";
my %w = ($s=>12);
print Dumper(\%w), "\n";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22781754

复制
相关文章

相似问题

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