file
命令告诉我:
tmp.txt: Little-endian UTF-16 Unicode text, with CRLF line terminators
cat
,head
等无法正确显示此文件。
但是vim
可以正确显示它。 vim
告诉我:
[~/tmp/tmp.txt] [utf-8,dos]
"tmp.txt" [converted][dos]
vim中的和:set
说fileencoding=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中正确读取此文件?
答案 0 :(得分:4)
我相信您的问题可以通过使用'<:encoding(UTF-16)'
或'<:encoding(UTF-16LE)'
来解决。我先尝试前者;如果文件具有字节顺序标记(BOM),那么它就是您所需要的。可能有一个BOM,这就是绊倒你的脚本。 ucs-2le是一种较旧的格式,类似但不一样。
了解更多信息: