我正面临一个问题。我正在Linux上编写一个Perl程序,我在远程Windows机器上执行Windows命令并在Perl变量中捕获输出。但是每两个字符之间有一些未知的字符。 是什么介绍这个角色?请帮助。
答案 0 :(得分:4)
Windows使用UTF-16LE对Unicode字符串进行编码。您需要使用Encode
模块对其进行解码
很难知道用这么少的信息建议什么,但一般来说你可以写
use Encode qw/ decode :fallbacks /;
my $text = decode('UTF-16', $windows_bytes, FB_CROAK);
据我所知,Windows总是使用字节订单标记(BOM),所以我只指定了UTF-16
。如果没有BOM,我需要使用UTF-16LE
decode
的第三个参数定义了数据是指定编码的无效示例时的行为。在这种情况下 croak 是最安全的
如果您要打开UTF-16编码的文件,则应该使用:encoding(UTF-16)
和:crlf
打开,就像这样
open my $fh, '<:encoding(UTF-16):crlf', $filename;