我们在用各种IDE编写纯C++或者C代码的控制台应用程序时,经常会遇到中文显示为乱码的问题,搞得在调试时非常的不方便,一时半会解决不了的话只能在代码中用英文来代替了。那么怎么样才能解决这个乱码的问题呢?
工具/原料
QtCreator集成开发环境
方法一/步骤
1、首先,我们要明白乱码的原因。原因肯定是编码与解码不一致导致的,我们先来看看编码与解码的情况。打开命令提示符窗口,在标题栏上右键,属性。
2、在打开的属性窗口中,选择选项标签页,可以看到当前代码页组框中有“936(ANSI/OEM-简体中文GBK)”的字样,很明显命令提示符的解码方式是GBK。
3、再来看看源代码main.cpp的编码。可以在记事本的另存为对话框中看到,编码是UTF-8的方式。而且我的QtCreator的默认解码方式也是UTF-8,所以能够正确解码,否则源代码也会是乱码。
4、来看看编译运行的情况。源代码中的“你好,C++!”已经变成火星文了,不知道怎么打火星文的童鞋有福了。
5、既然是编码的问题,当然从编码入手了。我们把源代码的编码方式改了不就行了。用记事本打开main.cpp,然后打开另存为对话框,对话框的下方的编码我们选择ANSI。然后确定覆盖原来的main.cpp。
6、这时候我们的QtCreator不乐意了,弹出了个对话框。意思是,源代码在外部被改写,要不要重新载入,选择YestoAll。
7、这时候又出现问题了,窗体顶部弹出个条,提示我们无法用UTF-8解码main.cpp。当然不能用UTF-8了,因为我们把它转换成了ANSI。而且,源代码中的汉字也变成了一团不知道是啥的东西。
8、点击那个条上的SelectEncoding。我们选择GBK那行,然后点击按编码重新载入。之后一切又都好了。
9、再运行下看看。好了,运行正常。对于强迫症者来说,感觉呼吸都轻松多了。
方法二/步骤
1、一稍僚敉视个项目可能有很多文件,那么每一个都这么改还真的是很麻烦。有没有更简单的方法呢?这就是我们的方法二。实际上CMD有个命令chcp可以修改命令提示符的解码方式。我们来试试看。打开一个命鸡舍诽浓令提示符窗口,输入chcp65001。65001就是UTF-8。
2、可以看到,命令提示符确实是变成了UTF-8。好的,我们把源代码用记事本再次的转换为UTF-8,然后再运行看看情况。可是我们发现,我们的程序依然是乱码。而且,程序窗口的解码方式并没有变。这可如何是好。
3、没关系,不知道你知不知道C语言有个库茵枝诱哎叫stdlib.h的,可以通过system()函数调用各命令的。那我们就在程序运行的时候调用命令来改解码方式。代码如霍丶魇汜下:#include<iostream>#include<cstdlib>usingnamespacestd;intmain(){system("chcp65001");system("cls");cout<<"你好,C++!"<<endl;return0;}我们来看看运行情况
4、已经可艮劁飨戽以看到正常的汉字了,除了“你”没有显示以外,其他的看起来都还不错。注意:如果你的仍然是乱码。你可以试着在命令提示的属性窗口中,字体标签页,将字体改为Lucidac泠贾高框onsole,然后再试试。至于为什么“你”字没法正常显示,我猜测是因为BOM的问题。先不管这个问题了,我们在“你”前面加几个空格就行了。再来运行看看。好了,问题解决了。空气又变的清新了。
方法三/步骤
1、虽然,加两行代码能解决问题,淤撸睾伽而且也方便了很多。但是无缘无故加两行代码,对于强迫症来说是有点难受的。而且据说system()无法跨平台使用,这个也是不太好的。我们来看看终极大杀器,一劳永逸鞅瓞慈玢解决问题。修改注册表配置。打开注册表,找到路径:HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe将右侧的CodePage的值修改为65001。我们甚至可以改字体的大小。
2、有童鞋可能看到了另一个注册表项,而且看起来很熟悉,我们也顺便把它的值改一改吧。
3、我们将system("chcp65001");system("cls");这两行代码注释掉,然后再运行代码看看。没有问题了。我以后都没有问题了,耶!