【转】执行cmd命令行出现中文乱码的问题 2020-08-19

在Windows上使用Node.js通过cmd调用别人的exe程序,结果发现输出中文乱码,代码如下:

const { exec } = require('child_process');

exec('ping 127.0.0.1', { encoding: 'utf8' }, (error, stdout) => {
    console.log('stdout1', stdout);
});

exec中的 encoding 选项可用于指定用于解码 stdout 和 stderr 输出的字符编码,其默认值为’utf8’,上面的代码中可以省略掉 { encoding: ‘utf8’ } 参数。

但是当输出中文时 stdout 确实乱码了。
解决办法有两种:

  1. 要么强制命令行输出 utf8 编码的数据
  2. 要么就使用Node去解码。

对于第一种方法,需要使用chcp 65001命令,参考:http://blog.csdn.net/quzhongxin/article/details/45336333

对于第二种方法,先将encoding设置为buffer,然后使用iconv-lite模块解码,代码如下:

const iconv = require('iconv-lite');
const { exec } = require('child_process');

exec('cmd_test.exe', { encoding: 'buffer' }, (error, stdout) => {
    console.log('stdout1', iconv.decode(stdout, 'cp936'));
});

之所以使用cp936解码,是因为一般简体中文Windows系统的控制台一般是这个编码,这个思路参考自http://ask.csdn.net/questions/167560 ,文中使用的encoding为binary,但实际上在Node v8中,encoding设置为为binary,其stdout也是得到一个buffer。

最后还需要注意的是,代码、控制台输出,每个环节的编码出现问题,都有可能导致中文乱码。当然一般英文不会,utf8、gbk等都是兼容ascii(或者说是在ascii的基础上发展而来)。

转载至CSDN,原文地址: https://blog.csdn.net/liuyaqi1993/article/details/78723797?utm_source=blogxgwz32

你可能感兴趣的:(【转】执行cmd命令行出现中文乱码的问题 2020-08-19)