摘要
最近在使用Clion编辑器写C++,发现run窗口输出中文出现乱码,切换到vs2019中也同样如此。
网络上很多解决办法,比如:
- 修改clion或pycharm的file encoding为utf-8然后把文件字符编码转为GBK。
这种方法最常见,但我可以负责任地说,这种方法会坑死你,因为,你xx改了文件的字符编码为GBK,项目组那么多文件你给改成了GBK,对于整个项目会带来灾难性的后果。gbk编写的文件在别的电脑上转为utf-8后,你会看到成片成片的小问号,然后你就被开除了。
显然这种方法治标不治本,我们的目的是让电脑去适应文件,而不是让文件适配我们的电脑。
而我这里讲的方法,只需要修改我们的电脑和ide,不会修改代码文件的utf-8字符编码。
思路
乱码的问题其实出现在cmd终端和jetbrains家的伪控制台上。cmd的默认编码为GBK,jetbrains自带伪终端run窗口字符编码也是GBK,知道了这一点,那么思路就很明了。
- 修改cmd终端字符编码
- 禁用jetbrains伪终端
修改cmd终端字符编码
对于这个,网络上也有很多操作,最著名且最没用的,就是在cmd输入命令:chcp 65001
这种做法,俩字,呵呵!
你只改变了当前终端,没改全局啊,cmd关了就回去了。
正确做法:
-
打开注册表编辑器(运行–>regedit),定位到如图路径:
用到的就是Console下的蓝色框框那个,右侧有个CodePage的键,没有的话就新建一个这个名的DWORD(32位)值,双击修改,如下图:
先选择基数里的十进制,然后左侧值改为65001。确定,关闭注册表编辑器,重启或注销计算机。 -
检查
重启或者注销回来之后,打开cmd,输入chcp,返回65001,就对了
这个时候cmd的字符编码就改好了。 -
检查vs2019
这时候在vs里运行一段带有输出中文的程序,神奇的事情发生了!!!还是乱码,是不是很惊喜!很意外!!是不是觉得我在骗人哈哈哈!
愚蠢的人类!!
解决:
<方式一>(不推荐)
打开电脑控制面板,选择“时间和区域”下面的“更改日期、时间或数字格式”,打开的窗口选择管理,更改系统区域设置,打开的窗口选中“Beta版:xxxxxxxxxx”
确定,重启或注销电脑。
回来,打开vs2019,运行一段带有输出中文的c++代码,输出中文正常!
**
这种方式会导致电脑里所有用GBK字符编码开发的软件会全部中文乱码,极其不推荐!!!
**
<方式二>(推荐)
同上面修改注册表的方法,还是在regedit内展开到下面这个地方。
可以看到,左侧Console下面有很多,这里面装的是电脑里装的全部的控制台。
这里要解释一下,我们之前修改了cmd的默认代码页,vs输出还是出现了乱码,本质原因就是vs并没有调用系统cmd,而是调用vs自带的控制台程序,这个控制台与系统cmd半毛钱关系没有。
所以我们可以看到,左侧有带有visual studio的字样的,选择那个,操作和前面一样,修改或新建一个CodePage值,十进制修改为65001,注销或重启电脑即可。
Clion等jetbrains编辑器修改
cmd解决了,回到Clion,运行代码,gg了,还是乱码。
原因:jetbrains有自家的终端,也就是run输出窗口,这个窗口是GBK的,脱离于操作系统。你在Terminal窗口输入chcp看看字符编码会发现这个Terminal窗口是utf-8的,因为terminal窗口就是系统的cmd。
此时有“大佬”冒出来要改文件字符编码了哈哈哈哈哈,别再坑人了这些大佬们!
很简单:
快捷键:ctrl+shift+alt+/
选择,registry
弹出一个窗口,其实我还没发现这个窗口如何不通过快捷键打开,应该是只能通过快捷键。这个窗口涉及到jetbrains软件非常底层的设置,非专业人士指导请谨慎修改。
找到run.processes.with.pty,右方把对勾勾去掉,确定,重启clion/pycharm。
对于idea,这种java编辑器的run窗口跟clion和pycharm不太一样,一般不会出现中文乱码问题,这篇文章也不赘述了。