Node.js 如何显示child_process.exec返回的特殊字符?

Node.js 如何显示child_process.exec返回的特殊字符?,node.js,encoding,exec,Node.js,Encoding,Exec,我正在使用child\u process.exec运行一个命令,该命令的输出中包含一些特殊字符,但Node.js总是将这些字符解释为替换字符(\uFFFD)。以下代码段应充分演示此行为: require("child_process").exec("echo äëïöü", function(stderr, stdout) { console.log(stdout); }); 有没有办法确定输出中返回的特殊字符是什么?如果相关的话,我正在使用Windows。的默认编码是utf8。您可以

我正在使用
child\u process.exec
运行一个命令,该命令的输出中包含一些特殊字符,但Node.js总是将这些字符解释为替换字符(
\uFFFD
)。以下代码段应充分演示此行为:

require("child_process").exec("echo äëïöü", function(stderr, stdout) {
    console.log(stdout);
});

有没有办法确定输出中返回的特殊字符是什么?如果相关的话,我正在使用Windows。

的默认
编码是
utf8
。您可以通过设置
encoding:'buffer'
,覆盖此默认值并获取包含文字二进制字节的原始缓冲区:

require("child_process").exec("echo äëïöü",
                              { encoding: 'buffer' },
                              function(err, stdout, stderr) {
   // `stdout` and `stderr` are Buffer instances
  console.dir(stdout);
});

将原始字节映射到相应的Unicode字符的最佳方法是什么?例如,本例中返回的缓冲区由表示为
132
137
139
148
129
的八位字节填充。如何将其转换为字符串“äëëöü”?这取决于您的环境。您可以查看子进程中的
process.env.LC\CTYPE
process.env.LANG
或执行
locale charmap
,以确定正在使用的当前编码。如果不是UTF-8或节点内置支持的任何其他编码,您需要研究使用npm上的
iconv
/
iconv lite
模块为您进行转换。明白了,谢谢!我使用了
iconv-lite
来使用我当前的代码页(437)进行解码,它工作得非常好。