我有包含以下内容的文件/tmp/xxx:
/tmp/xxx
00000000 D0 BA D0 B8 │ D1 80 D0 B8 │ D0 BB D0 B8 │ D0 BA к и р и л и к
当我读取文件的内容并打印它时,我得到错误:
Wide character in print at ...
来源是:
use utf8; open my $fh, '<:encoding(UTF-8)', '/tmp/xxx'; print scalar <$fh>
打印输出为:
кирилик
5anewei61#
您正在打印到不需要UTF8的STDOUT。添加
binmode(STDOUT, "encoding(UTF-8)");
以更改已打开句柄上的内容。
juud5qan2#
use utf8表示Perl希望您的源代码是UTF-8。open编译指示可以更改标准文件句柄的编码:
use utf8
open
use open qw( :std :encoding(UTF-8) );
而且,无论如何处理您的输出都需要使用UTF-8。如果您想在终端中正确地看到它,那么您需要正确地设置它(但这与Perl无关)。
2条答案
按热度按时间5anewei61#
您正在打印到不需要UTF8的STDOUT。添加
以更改已打开句柄上的内容。
juud5qan2#
use utf8
表示Perl希望您的源代码是UTF-8。open
编译指示可以更改标准文件句柄的编码:而且,无论如何处理您的输出都需要使用UTF-8。如果您想在终端中正确地看到它,那么您需要正确地设置它(但这与Perl无关)。