我使用Devel::REPL
。转储结构时,它当前使用一些转义符,如\x{17d}
,用于字符串中的重音字符。如何让它直接输出UTF-8?这是一个例子:
$ re.pl
$ {'žůžo' => ['bříško']}
$HASH1 = { "\305\276\305\257\305\276o" => [ "b\305\231\303\255\305\241ko" ] };
有趣的是,只需输入字符串即可直接输出:
$ re.pl
$ 'žůžo'
žůžo
这应该是“裸骨”版本:
$ perl -MDevel::REPL -e 'my $repl = Devel::REPL->new; $repl->load_plugin("DDS"); $repl->run'
$ {'žůžo' => ['bříško']}
$HASH1 = { "\305\276\305\257\305\276o" => [ "b\305\231\303\255\305\241ko" ] };
所以看起来Data::Dump::Streamer
是罪魁祸首,但我没有进一步发展。我在Data::Dumper
Perl Monks处发现了一些关于Unicode的讨论,但这显然无济于事。粗略地浏览一下Data::Dump::Streamer
文档并没有发现任何有趣的Unicode或猴子修补。
答案 0 :(得分:2)
你不能,至少在Devel :: REPL调用Data :: Dump :: Streamer的情况下。 DDS将始终编码不在\ x20- \ x7e范围内的任何字符。
您可以修改DDS以选择其他方式。
答案 1 :(得分:2)
在阅读了DDS的来源后,我根据Perl Monks code提出了这个补丁:
$ cat quote.rc
{
no warnings 'redefine';
sub Data::Dump::Streamer::_qquote {
my $s = shift;
return "'$s'";
}
}
$ re.pl --rcfile ./quote.rc
$ {'žůžo' => ['bříško']}
$HASH1 = { 'žůžo' => [ 'bříško' ] };
我不知道改变会破坏什么,但由于我的用例非常简单,我对这个黑客很满意。如果我的房子因此被烧毁,我会发布更新。
答案 2 :(得分:1)
转储程序无法知道您的字符串(C5 BE ...
)是Unicode代码点的UTF-8编码。具体做法是:
所以你要求的是一些非常具体的数据结构。您可以根据Devel::REPL::Plugin::DDS制作自定义插件。