Pra*_*eep 4 perl encoding endianness utf-16le
实际上我必须解析一些可以是任何形式的endian(Big或Little)的文件.如果我使用一个编码并解析其他编码,Perl解释器就会死掉.
open (my $fh, "<:raw:encoding(UTF-16LE):crlf", $ARGV[0]) or die cannot open file for reading : $! \n";
Run Code Online (Sandbox Code Playgroud)
要么
open (my $fh, "<:raw:encoding(UTF-16BE):crlf", $ARGV[0]) or die cannot open file for reading : $! \n";
Run Code Online (Sandbox Code Playgroud)
输出(对于LE中的文件和perl的编码为BE)
UTF-16BE:Malformed HI surrogate dc00 at toASCII.pl line 123.
Run Code Online (Sandbox Code Playgroud)
大多数UTF-16le文件都是有效的UTF-16be文件,反之亦然.例如,无法判断是否0A 00指示U + 000A(UTF-16le)或U + 0A00(UTF-16be).所以,假设没有BOM,你必须猜测.
可能的启发式(按可靠性的降序排列):
FF FE,那么它必须是UTF-16le.FE FF,那么它必须是UTF-16be.0A 00或0D 00,那么它可能是UTF-16le.00 0A或00 0D,那么它可能是UTF-16be.xx 00很少00 xx,那么它可能是UTF-16le.00 xx很少xx 00,那么它可能是UTF-16be.笔记:
您可以在文件中使用:raw,在其上执行上述部分或全部测试以确定编码,然后使用decode和s/\r\n/\n/g.
| 归档时间: |
|
| 查看次数: |
286 次 |
| 最近记录: |