解决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-09-22 07:12:04

    git Please move or remove them before you can merge

    这是因为本地有修改,与云端别人提交的修改冲突,又没有merge. 如果确定使用云端的代码,最方便的解决方法是删除本地修改,可以使用以下命令: git clean -d -fx

  • 2019-09-22 07:36:52

    ALIN10146-自查方案

    报错原因 1.请求appid应用未上线或者是应用类型是第三方应用 2.签约权限问题 3.签名类型使用错误 4.请求参数问题 5.秘钥匹配问题 6.应用类型问题

  • 2019-09-22 07:37:44

    ALIN10146,ALI38173支付宝APP支付集成时出现的问题

    最近在做支付宝APP的集成,遇到了一堆问题。百度不到,ALI64还好点,ALI38173基本上就没了。我也是测试了很久才解决的。ALI64的解决方案是因为要对私钥有问题。ALI38173是签名有问题。签名的解决方...

  • 2019-09-22 22:32:20

    Spring Shiro 使用默认的Session会话管理

    项目中用到了shiro session会话管理机制,今天来总结一下,以下都是在spring boot框架实现。 shiro的session管理机制很完善,也是独立于j2ee容器且不依赖的,所以我们完全可以使用shiro提供给我们的session会话管理来实现我们的业务逻辑,默认提供的sessionDAO是memorySessionDAO,这里也主要讲它的配置和原理。 首先来看下如何在spring boot下配置默认的session会话管理: ShiroConfig类:

  • 2019-09-23 16:17:13

    consola 教程

    consola 和 console 只差一个字母,并且它们都是控制器日志输出的好帮手。console 在某些方面,使用有些局限性。consola 是一个功能更丰富,更漂亮的控制台日志输出控件。今天我们一起来学习它的