c++输出中⽂乱码解决⽅案
问题的原因应该在cmd的编码和c++程序编码(源⽂件编码)的不同。cmd默认的是gbk编码,⽽我⽤的vs code默认是utf-8编码,因⽽在输出中⽂⽂本时会出现乱码。
但我也遇到了⼀个⽐较怪异的情况,就是cmd和cpp⽂件编码都是gbk的情况下输出中⽂依然会乱码,但是当输出的⽂本第⼀个字符是英⽂或者空格的时候就不乱码了,这个问题依然没有解决,搜索的时候发现有⼈也遇到过,但也不知道怎么解决的。
所以解决⽅案就是全部⽤utf-8编码(搜索到的还有什么local、wcout、字符宽度、L"  "什么的,但是没太看懂)
1.在cmd⾥先运⾏命令
chcp 65001
一串好看的乱码然后再在命令⾏⾥启动程序。这种修改cmd编码的⽅式只能持续到这次命令⾏程序关闭为⽌。
2.或者在c++源代码⾥更改cmd编码
#include <cstdlib>//可以引⼊system("pause")来实现程序的暂停
using namespace std;//引⼊命名空间std,使得std::cout和std::endl可以直接省去std::
int main()
{
system("chcp 65001");
return0;
}
这样有⼀点我觉得不好的是会显⽰执⾏chcp这条命令的返回⽂本,不太好看
3.使⽤SetConsoleOutputCP
#include <windows.h>//⽤于函数SetConsoleOutputCP(65001);更改cmd编码为utf8
using namespace std;//引⼊命名空间std,使得std::cout和std::endl可以直接省去std::
int main()
{
SetConsoleOutputCP(65001);
return0;
}
4.使⽤旧版控制台
在使⽤上述1、2、3的设置后虽然可以输出在源代码⾥定义好的中⽂字符,但是在⽤cin让⽤户输⼊时,却不能正确输出⽤户输⼊的中⽂字符。
在cmd的属性页⾯勾选使⽤旧版控制台后解决了上述所有的问题。(虽然不想扔锅给cmd,但这么看来,好像还是cmd的锅
5.追根溯源的终极原因
终于,在我遇到这个问题后的四个⽉后,上次因为这个问题询问过的同学也遇到了这个问题。在同学地努⼒探索下,终于到了原因是什么。
直接放他的⽂章链接了: