解决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,确定之后,熟悉的中文又出现了。






  • 2018-08-02 15:03:28

    正则提取字段

    如下文案,如何提取中间的文案呢 eq: 我们的%%aaa%%不一致,哈哈哈 提取后是aaa

  • 2018-08-07 20:00:42

    xUtils3.0版本的发送同步网络请求的方式

    对于Android开发来说,基本都是用异步来从网络上请求数据,很少用到同步请求的。近日项目有个地方需要使用到同步请求(以我目前的知识储备来说好像只能用同步请求来解决这个问题了),去网上搜索相关资料,又没有找到什么明确的使用方法。所以记下来,以备不时之需。

  • 2018-08-14 23:35:28

    Retrofit 设置 超时时间

    今天开发的时候遇到一个网络请求超时的问题,后台处理是成功的,但是移动端返回的总是提示请求超时,在设置了retrofit请求超时的时间延长以后,就可以请求成功了,下面是配置的方法: