摘要
最近在使用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++代码,输出中文正常!
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不太一样,一般不会出现中文乱码问题,这篇文章也不赘述了。