口音与数据打印出不尊重::自卸车PERL(Accents not respected in prin

2019-10-19 18:11发布

我想打印出一个关联数组的内容。 对于这个我使用数据::自卸车。

所以,对于为例,如果关联数组被称为“%W”,我写的:

  print OUT Dumper(\%w);

这里的问题:有一些类似的话被打印出来作为“R \ X {} E9 CENTE”“最近搜索”。

如果我写的只是:

print OUT %w;

我没有问题,所以“最近搜索”会被打印出来作为“最近搜索”。

用于脚本中的所有文本文件都在UTF8。 而且我用的模块“UTF8”我始终指定的字符编码系统。

对于前。 :

open( IN, '<', $file_in);
binmode(IN,":utf8");

我敢肯定,这个问题是关系到数据::自卸车。 有没有办法解决这个或另一种方式来打印出一个关联数组的内容?

谢谢。

Answer 1:

这是故意的。 由输出Data::Dumper旨在产生相同的数据结构时eval uated作为Perl代码。 为了限制字符编码的效果,非ASCII字符将使用转义倾倒。 除此之外,这是明智的设置$Data::Dumper::Useqq = 1 ,使任何不可打印的字符使用转义倾倒。

Data::Dumper是不是真的意味着作为的方式来显示数据结构-如果你有特定的格式要求,只是自己编写必要的代码。 例如

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 } "}";

产生

{
  bárewørdş: –Uni·code–
}


Answer 2:

您还可以使用数据::自卸车:: AutoEncode。

use utf8;
use Data::Dumper::AutoEncode;

warn eDumper($hash_ref);

CPAN数据::自卸车:: AutoEncode



Answer 3:

这对我的作品:

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


Answer 4:

数据::自卸车是一个调试工具。 它让你知道什么字符串包含没有使它容易受到编码错误。 这不是一个问题,这是一个特点。 它发出什么( "r\x{e9}cente"是那些必须在串(的足够可读表示72 E9 63 65 6E 74 65 )。



文章来源: Accents not respected in printing out with data::dumper PERL