相关文章推荐
叛逆的警车  ·  将消息从C++ ...·  1 周前    · 
傻傻的伤痕  ·  C++ ...·  1 周前    · 
沉稳的炒饭  ·  C++ -- ...·  1 周前    · 
善良的钥匙扣  ·  Azure Cosmos DB 的 SQL ...·  1 年前    · 

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

const { exec } = require('child_process');
exec('cmd_test.exe', { encoding: 'utf8' }, (error, stdout) => {
    console.log('stdout1', stdout);

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

但是当输出中文时 stdout 确实乱码了。解决办法有两种,要么强制命令行输出 utf8 编码的数据,要么就使用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的基础上发展而来)。

然后,我们使用 Unicode 转义序列输出了一个中文字符 ‘你’ 和一个包含中文字符的英文字符串 ‘Hello, 世界!当使用 Node.js 进行开发时,有时在控制台输出中文字符时会出现乱码问题。在本文中,我将向您展示如何解决 Node.js 控制台输出乱码问题,并提供相应的源代码示例。如果我们在控制台输出中直接使用中文字符,仍然可能会遇到乱码问题。例如,要输出一个中文字符 ‘你’,我们可以使用。Node.js 默认使用的是 ASCII 编码,而我们需要将其设置为 UTF-8,以支持中文字符的输出。 var child_process = require('child_process'); child_process.exec('ipconfig', { encoding:“utf-8”}, function(err, stdout, stderr){ console.log(stdout, stderr) 需要纠正下,改成如下写法即可: JavaScript是一种基于浏览器的编程语言,主要用于在Web浏览器中运行,无法直接与操作系统中的命令行接口(cmd)进行交互。然而,可以使用一些方法在JavaScript中执行命令行操作,但这些方法可能会受到浏览器的安全限制和限制性API的支持程度的影响。需要注意的是,这种方法只能在Node.js环境中运行,并且受到浏览器的安全限制和限制性API的支持程度的影响。综上所述,由于JavaScript主要是一种用于Web浏览器中的编程语言,无法直接与操作系统中的cmd进行交互。一种常见的方法是使用。 最近在windows上使用nodejs做一些小应用,使用中文的时候经常会遇到乱码问题, 比如使用exec方法执行一些系统命令的时候,接收到的stdout内容总是乱七八糟~~ 目前总结的比较有效的方法是在所有需要字符串传输的地方都使用iconv进行gbk转码: exec(cmdStr, {encoding: "gbk"}, function(err, stdout, stderr) var child_process = require('child_process'); var iconv = require('iconv-lite'); var encoding = 'cp936'; var binaryEncoding = 'binary'; child_process.exec('ipconfig', { encoding: binaryEncoding }, fu... 当我使用exec读取时就乱码了,虽然可以使用iconv进行转码,但是不同电脑的活动代码页是不一样的,就需要在获取后根据chcp值做对应的转码。在windows上使用nodejs exec读取时会有些电脑上会出现乱码问题。直接在cmd上执行hostname,返回的是没有问题的。最近在做一个项目需求是读取计算机名称。... "start": "chcp 65001 && react-scripts start", "build": "react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject", nodejs输出出现中文乱码,需查看两点:1、js文件是否保存为utf-8格式,判断可用记事本打开js文件,点击“另存为”查看字符格式是否为utf-8,如果不是,直接另存为替换2、在js文件中增加编码说明,让浏览器知道用什么编码来解释网页,例如:res.header("Content-Type", "text/html; charset=utf-8")... nodejs中文的之处不是很好,在编写保存你的js文件的时候,将文件的格式存储为UTF-8格式的,因为你的文件在存储是默认的存储为ASNI的编码格式,所以你将自己的文件格式改为UTF-8这个乱码问题就解决了,希望可以帮到你,有不足之处请多多指教,本人初次接触nodejs... node 运行环境:win10 下的 dos 问题描述:初学 node.js,按照菜鸟教程 阻塞代码 部分执行后出现如下图所示的中文乱码。 第一行中文乱码是读取的文件内容,第二行是 js 文件中的控制台打印。 乱码产生原因:node.js 的默认编码为 utf-8,而在 windows下创建的文件默认编码为 ANSI,读取文件的字节码再转为字符串就会出错变为乱码。 解决方案: 1、将 node.js 文件的编码改为 utf-8 无 BOM 编码格式。 2、先统一用二进制编码方式读取,然后再用 GBK 解码。