tutujo 2015-02-19 05:30 采纳率: 0%
浏览 11626

node.js调用系统命令,输出结果中文会乱码

node.js的超级菜鸟一只……
想在windows用child__process.exec()函数来执行一个系统命令,然后把结果在后台输出,但是中文会乱码……
源代码:

 app.post('/', function (req, res, next){
    child_process.exec('dir ' + req.params.name, function (err, data) {
        console.log(data);
        res.end('data', "UTF-8");
    });

});

我曾经在console.log(data)前面加过

 data = iconv.decode(data, 'GBK');

或者

 require('encoding').convert(data, "GBK")

都没有用,不知道这个问题怎么解决呢?

  • 写回答

3条回答 默认 最新

  • cyrilluce 2015-06-15 03:45
    关注

    刚好我们这里也碰到同样的问题,参考了其它人的方案,一起发出来,以免继续有人踩坑

    简体中文windows命令行,都使用的是CP936(近似于gb2312)编码,nodejs以utf8识别是会出问题。
    可以这样处理:

    var child_process = require('child_process');
    var iconv = require('iconv-lite');
    var encoding = 'cp936';
    var binaryEncoding = 'binary';
    
    child_process.exec('svn log', { encoding: binaryEncoding }, function(err, stdout, stderr){
        console.log(iconv.decode(new Buffer(stdout, binaryEncoding), encoding), iconv.decode(new Buffer(stderr, binaryEncoding), encoding));
    });
    
    

    先用binary来存储输出的文本,再用iconv来以cp936解析。

    评论
  • jzjie 2016-11-09 21:50
    关注

    不得不说厉害,用楼上这种 解决了,谢谢大神,谢谢大神~困扰我好久了,本身都准备不弄这个乱码了,哈哈,赵大方法了

    评论
  • qq_26092629 2020-04-05 05:06
    关注

    buffer不能用了,new buffer 替换成buffer.from

    评论
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部