Nodejs exec win 乱码
Nodejs exec win 乱码
最近有个需求在内网服务器上跑几个 ping 命令测试点东西 在 Mac 下写完测试了也问题,于是就丢服务器,服务器是 win 的,发现用 exec 执行完 ping 命令返回有乱码
用 iconv-lite 尝试转 gbk 还是乱码
各位前辈有遇到过吗?
主要代码如下
var exec = require('child_process').exec;
exec('ping -c3 127.0.0.1', function (err, stdout, stderr) {
console.log(stdout) // 这里在 win 下获得的值有乱码
});
1 回复
在 Node.js 中使用 exec
方法执行 Windows 命令时遇到乱码问题,通常是由于字符编码不匹配导致的。默认情况下,Node.js 的 exec
方法可能会使用系统的默认编码(在某些 Windows 环境中可能是 GBK),而输出内容的编码可能与期望的(如 UTF-8)不一致。
为了解决这个问题,你可以在 exec
方法的选项中明确指定编码为 ‘utf8’。此外,确保被执行的命令本身及其输出也是以 UTF-8 编码处理的。
以下是一个示例代码,展示如何在 Node.js 中使用 exec
并指定 UTF-8 编码:
const { exec } = require('child_process');
exec('dir', { encoding: 'utf8' }, (error, stdout, stderr) => {
if (error) {
console.error(`执行错误: ${error}`);
return;
}
if (stderr) {
console.error(`标准错误输出: ${stderr}`);
return;
}
console.log(`标准输出:\n${stdout}`);
});
在这个例子中,dir
是一个 Windows 命令,用于列出当前目录的内容。通过指定 { encoding: 'utf8' }
,我们确保 stdout
和 stderr
以 UTF-8 编码被接收和处理。
如果你的命令输出本身包含非 UTF-8 编码的字符,可能还需要在命令级别进行转码,或者在接收输出后进行适当的编码转换。希望这能帮助你解决乱码问题!