[ 注 :这个问题是一个副产品较早前的问题我的。 当时我张贴早些时候的问题我不知道,它实际上询问两个不同的问题。 由于通过tripleee评论,我想出答案两者之一。 以下限制本身剩余问题的问题。]
我将使用下面的简短的演示脚本来说明这个问题。
# -*- coding: utf-8 -*-
use strict;
use feature 'unicode_strings';
use POSIX 'locale_h';
use locale;
use utf8;
setlocale( LC_CTYPE, 'de_DE.UTF-8' );
binmode( STDOUT, ':utf8' );
my $non_ascii = 'ßäöüÄÖÜ';
print "$non_ascii\n";
my @non_ascii = split //, $non_ascii;
print "$_\n" for @non_ascii;
$DB::single = 1; 1; # return control to DB
(最后一行实际上是一个断点。)
好了,现在我的Perl调试器下运行这样的:
% perl -d dbtest.pl
Loading DB routines from perl5db.pl version 1.37
Editor support available.
Enter h or 'h h' for help, or 'man perldebug' for more help.
main::(dbtest.pl:8): setlocale( LC_CTYPE, 'de_DE.UTF-8' );
DB<1> c
ßäöüÄÖÜ
ß
ä
ö
ü
Ä
Ö
Ü
main::(dbtest.pl:17): $DB::single = 1; 1; # return control to DB
DB<1>
到目前为止好:脚本产生预期的输出,现在调试已进入单步模式,并等待输入。
在这一点上, print
仍然产生正确的(即,人类可读的)输出:
DB<1> print $non_ascii
ßäöüÄÖÜ
DB<2> print "$_\n" for @non_ascii
ß
ä
ö
ü
Ä
Ö
Ü
DB<3>
但是,如果我现在使用的x
指令来美化打印的内容@non_ascii
阵列,输出不再期待权:
DB<3> x \@non_ascii
0 ARRAY(0x7fab6196f790)
0 '\337'
1 '\344'
2 '\366'
3 '\374'
4 '\304'
5 '\326'
6 '\334'
DB<4> binmode( STDOUT, ':utf8' );
DB<5> x \@non_ascii
0 ARRAY(0x7fab6196f790)
0 '\337'
1 '\344'
2 '\366'
3 '\374'
4 '\304'
5 '\326'
6 '\334'
DB<6>
怎样才能获得x
产生人类可读的输出?