有关Clion的控制台输出乱码问题

1,080 阅读3分钟

最近有点空闲时间,准备学习下C++,由于是jetbrains的忠实狂热粉,所以我选择使用Clion作为我学习C++的IDE工具。界面是一如既往的简洁美观,让人敲代码都有股心驰神往的感觉,但安装好后也遇到了不少问题,其中比较主要的就是运行环境配置以及控制台输出乱码问题。由于运行环境配置也会影响到控制台输出乱码,因此我就放一起说了。

问题截图

image.png

问题本质以及解决方案

很多IDE的乱码问题答案都只是教新手怎么配置,但并没有说明出现这类问题的根本原因是什么。我其实也没有完全理解,仅从我收集到的资料浅显的说明下我对该问题本质的理解。 原因就在于操作系统的CMD控制台输出有两个,一个是标准且通用的utf-8编码,另一个是GBK编码(此处我的操作系统比较新,所以用的是PowerShell,但也是有两个的。)

image.png 那为什么要设置成两个呢?这是因为尽管大多数的程序使用的是UFT-8编码,但还是有不少程序使用的是GBK的编码格式,所以为了兼容这些程序,操作系统设置了两个输出控制台。因此如果直接修改操作系统的默认编码格式,将其设置为明确的编码格式,则很有可能导致一些以GBK为编码格式的应用程序乱码甚至是不可用,所以,最好不要这样做

那肯定有人问了,你这是操作系统的默认设置呀,和IDE乱码有什么关系啊?其实,是有关系的,因为运行环境中的编译器会指定代码的编码格式,这个其实是可以在ide中进行设置的:

image.png

image.png 可是我当时在此处都设置成UTF-8也没有任何效果,我猜IDE其实并不能直接控制编译器选择使用那种编码格式的控制台,应该是通过编译器暴露给外界的操作功能来实现不同编码格式控制台的转换操作的(亦或者是IDE和编译器的设置之间还有个优先级关系,而编译器的优先级高于IDE呢?),既然都猜测到这里了,那有没有一种可能就是由于配置的运行环境的编译器出了问题呢?它无法切换utf-8编码格式的控制台进行结果输出呢?我查找了相关的资料,果然如此,MinGW的开发者是有发过相关邮件说明这个问题的,并给出了明确的操作步骤:

image.png 那就是使用 ctrl+shift+alt+/ 快捷键把 run.processes.with.pty的选项给关掉,这样,就能正确的使用UTF-8编码的控制台进行输出了,自然也就不会乱码了。但是据网上很多人所说,这个选项关闭可能会导致一些程序运行报错,因此如果为了避免这种情况,也可以使用 system("chcp 65001"); 这段代码在入口函数中进行声明,此时也能解决乱码,不过它的本意是强制在此次程序运行时使用UTF-8控制台输出,仅仅只有此次程序运行生效。 可这对于强迫症患者仍然接受不了,所以咱们换一个运行环境就行了,我换成了Cygwin,具体的操作可以参考这篇知乎上由 C语言进阶 写的[文档](C/C++编译器:Clion!超详细安装和配置教程,你学会了吗? - 知乎 (zhihu.com)),这样就可以通过上下移动切换默认的运行环境了。

image.png

此处贴出成功的操作结果: image.png