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

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

作者: 且须文雅 | 来源:发表于2020-08-19 15:22 被阅读0次

    在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

          本文链接:https://www.haomeiwen.com/subject/ehzrjktx.html