代码之家  ›  专栏  ›  技术社区  ›  Eugen Konkov

如何在`处去掉`打印中的宽字符`?

  •  20
  • Eugen Konkov  · 技术社区  · 7 年前

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

    打印输出为:

    кирилик  
    
    2 回复  |  直到 7 年前
        1
  •  23
  •   brian d foy    4 年前

    这个 use utf8 意味着Perl希望您的源代码是UTF-8。

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

    use open qw( :std :encoding(UTF-8) );
    
        2
  •  22
  •   janh    7 年前

    您正在打印到不需要UTF8的标准输出。 添加

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

    在已打开的句柄上更改。