在perl中的linux环境中转换windows命令输出

时间:2016-06-03 12:09:36

标签: linux perl

我正面临一个问题。我正在Linux上编写一个Perl程序,我在远程Windows机器上执行Windows命令并在Perl变量中捕获输出。但是每两个字符之间有一些未知的字符。 是什么介绍这个角色?请帮助。

1 个答案:

答案 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;