重新启动Perl调试器后的非ASCII输出
[编辑:原来这个问题的原始版本包含两个不同的问题,伪装成一个问题。(我是在阅读并仔细阅读tripleee的评论后才意识到这一点的。)因此,我将原来的问题一分为二。我编辑了这篇文章,将我在tripleee的评论中发现的问题包括在内,并发布了第二篇文章。顺便说一句,第二篇文章包含了我在这篇文章中描述的问题的修复方法,即使用重新启动Perl调试器后的非ASCII输出,perl,debugging,unicode,utf-8,Perl,Debugging,Unicode,Utf 8,[编辑:原来这个问题的原始版本包含两个不同的问题,伪装成一个问题。(我是在阅读并仔细阅读tripleee的评论后才意识到这一点的。)因此,我将原来的问题一分为二。我编辑了这篇文章,将我在tripleee的评论中发现的问题包括在内,并发布了第二篇文章。顺便说一句,第二篇文章包含了我在这篇文章中描述的问题的修复方法,即使用binmode] 我将使用下面的简短演示脚本来说明这个问题 # -*- coding: utf-8 -*- use strict; use feature 'unicode_st
binmode
]
我将使用下面的简短演示脚本来说明这个问题
# -*- coding: utf-8 -*-
use strict;
use feature 'unicode_strings';
use POSIX 'locale_h';
use locale;
use utf8;
setlocale( LC_CTYPE, 'de_DE.UTF-8' );
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 -C -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
\337\344\366\374\304\326\334
DB打印$non\u ascii
\337\344\366\374\304\326\334
重新启动后,如何保持输出的可读性?“警告:某些设置和命令行选项可能丢失!”听起来像是这样的解释。特别是,你的
-C
放错地方了吗?@tripleee:谢谢!您的评论修复了重启问题,但x
的问题仍然存在。原来我原来的问题提出了两个不同的问题。我不知道如何处理这种情况,所以我只是发布了一个新版本的问题,将问题与x
隔离开来。我将不得不修改这条线索中的问题,这样它就不会与新问题重叠。。。请随意发送您的评论作为答案。使用使用open':std',':encoding(UTF-8)'
而不是-C
应该解决这个问题。你自己的答案更好。请随意取消删除并接受它。
DB<1> print $non_ascii
\337\344\366\374\304\326\334