如何在Perl中阅读Little-endian UTF-16 Unicode文本?

时间:2012-03-15 01:33:45

标签: perl

file命令告诉我:

tmp.txt: Little-endian UTF-16 Unicode text, with CRLF line terminators

cathead等无法正确显示此文件。

但是vim可以正确显示它。 vim告诉我:

[~/tmp/tmp.txt] [utf-8,dos]
"tmp.txt" [converted][dos]
vim中的

:setfileencoding=ucs-2le

所以Perl:

open FH,'<:encoding(ucs-2le)',$file;
while(<FH>){
    chomp;
    # A start
    print;  
    # Perl: Wide character in print at a.pl line 12, <FH> line 1
    # And display incorrect
    # A end

    # B start
    binmode STDOUT,":utf8";
    print;  
    # display incorrect too
    # B end

}

如何在Perl中正确读取此文件?

1 个答案:

答案 0 :(得分:4)

我相信您的问题可以通过使用'<:encoding(UTF-16)''<:encoding(UTF-16LE)'来解决。我先尝试前者;如果文件具有字节顺序标记(BOM),那么它就是您所需要的。可能有一个BOM,这就是绊倒你的脚本。 ucs-2le是一种较旧的格式,类似但不一样。

了解更多信息:

Perl file encoding

Perl Encode