如何摆脱`印刷品中的宽字符?

时间:2017-12-22 11:21:52

标签: perl unicode file-io

我的文件/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>

print的输出是:

кирилик  

2 个答案:

答案 0 :(得分:7)

您正在打印到STDOUT,它不会期待UTF8。 添加

binmode(STDOUT, "encoding(UTF-8)");

在已打开的句柄上更改它。

答案 1 :(得分:4)

use utf8表示Perl希望您的源代码为UTF-8。

open pragma可以更改标准文件句柄的编码:

use open qw(:std :utf8);