解决Node.js的命令行输出中文乱码问题(也适用于Electron)

2019-02-24 09:47:09

一般我们的js文件都是试用utf8编码保存的,但是中文windows的命令行一般默认使用cp936编码(就是gbk),这样我们用js代码 console.log('中文');输出日志的时候,会发现输出的是乱码。

网上有提供一些解决方案,典型的就是用iconv或iconv-lite,把这些中文字符串先转成gbk再输出。
但是这个方案我试了多次,在win10的命令行下,utf8的字符串是成功转成了gbk字符串了(通过打印Buffer可以见到),但是输出还是乱码。
另外,这个方案也需要自行再封装一个日志函数,或者在需要打印中文的地方自行转换,用起来也相对麻烦。

换过另一种思路,让cmd可以输出utf8的字符串呢?
当然是可以的,通过命令chcp 65001就可以把当前命令行的

输出转成utf8编码的。
现在的问题就是剩下如何在js代码里启用这条命令了,花了不少时间,发现此路不通,那么只能从代码外来解决。
解决方式也很简单,就是修改我们的package.json脚本里的script,在需要使用到utf8的命令前先运行下编码转换的命令,参考如下:

"script": {    "start": "chcp 65001 && node ."}

运行一下,正确输出中文了。

win7下的补充

上述的方案针对win10可以正常工作,但是win7下的话,仍然是会出现乱码,这个就不是因为字符编码的原因了,是cmd的默认字体导致的,我们需要修改下默认字体。
打开cmd,在左上角的图标右键点击,出来右键菜单,选择属性,在弹出的设置框里,选中字体tab,然后把字体修改成Consolas或者Lucida Console,确定之后,熟悉的中文又出现了。






  • 2019-04-01 23:20:58

    隐藏在图片中的密钥

    在客户端开发的时候,有时需要把密钥保存在本地。这时就会遇到密钥安全性的问题。要保证密钥安全性,无非就是混淆、隐藏、白盒等手段。本文以隐藏在图片中来阐述密钥的安全保存。

  • 2019-04-01 23:22:33

    验证数字签名

    应预先设置验证首选项。在打开 PDF 后显示包含签名的验证详细信息时,这有助于确保数字签名有效。有关详细信息,请参阅设置签名验证首选项。

  • 2019-04-01 23:23:27

    图像隐写之使用PHP隐藏图像中的文本

    隐写术是一门研究隐藏信息的科学艺术,通过隐写术,可以只让发送者和接收者知道隐藏的信息。 图像隐写术则是研究将数据隐藏在图像中,通过该技术可以防止无关用户发现这些隐藏的信息或数据。

  • 2019-04-08 16:01:57

    Window 设置pm2开机自启动服务

    下面用 pm2 来启动我们自己的服务程序 app.js, 然后告诉 pm2 开机后自动运行我 app.js 继续在管理员命令行下, cd 到 app.js 所在目录

  • 2019-04-10 17:25:21

    Joda-Time详解,最好用的java时间工具

    任何企业应用程序都需要处理时间问题。应用程序需要知道当前的时间点和下一个时间点,有时它们还必须计算这两个 时间点之间的路径。使用 JDK 完成这项任务将非常痛苦和繁琐。