重新启动Perl调试器后的非ASCII输出

重新启动Perl调试器后的非ASCII输出,perl,debugging,unicode,utf-8,Perl,Debugging,Unicode,Utf 8,[编辑:原来这个问题的原始版本包含两个不同的问题,伪装成一个问题。(我是在阅读并仔细阅读tripleee的评论后才意识到这一点的。)因此,我将原来的问题一分为二。我编辑了这篇文章,将我在tripleee的评论中发现的问题包括在内,并发布了第二篇文章。顺便说一句,第二篇文章包含了我在这篇文章中描述的问题的修复方法,即使用binmode] 我将使用下面的简短演示脚本来说明这个问题 # -*- coding: utf-8 -*- use strict; use feature 'unicode_st

[编辑:原来这个问题的原始版本包含两个不同的问题,伪装成一个问题。(我是在阅读并仔细阅读tripleee的评论后才意识到这一点的。)因此,我将原来的问题一分为二。我编辑了这篇文章,将我在tripleee的评论中发现的问题包括在内,并发布了第二篇文章。顺便说一句,第二篇文章包含了我在这篇文章中描述的问题的修复方法,即使用
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