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' },我们确保 stdoutstderr 以 UTF-8 编码被接收和处理。

如果你的命令输出本身包含非 UTF-8 编码的字符,可能还需要在命令级别进行转码,或者在接收输出后进行适当的编码转换。希望这能帮助你解决乱码问题!

回到顶部