VS2017+Qt5.9 中文乱码

Qt读写文件操作也会遇到类似问题,具体的我没操作

本次实验是在Qt控制台程序中测试代码。整个过程很漫长,反正我就一种一种方法试,我总相信“有问题就一定会有人解决”。

        如果简单的调用qDebug()函数输出信息(添加#include<QDebug>头文件,但是VS中没有补全提示(仅#include<qdebug.h>)),则会出现中文不能正常显示,会以'?'代替中文字符。如果将QString对象用qDebug()像cout那样输出还不能去掉字符串两端的引号。

VS2017+Qt5.9 中文乱码

        然后我baidu了一下,看到一大部分程序猿说修改什么什么编码格式,或者其他什么,反正我也没看太懂,然后无意间看了有一篇给出了很好的解决方案(也有缺点(不过可以忽略))。

       有一种说法是在qDebug()<<mystr的时候转换一下,使用qDebug() << mystr.toStdString().c_str(),然而还是一样的不行啊。(不用怀疑,编码方式,或者编码格式肯定没错)

VS2017+Qt5.9 中文乱码

然后呢,toUtf8()我也试了一下,依然没有办法输出中文。

VS2017+Qt5.9 中文乱码

接下来就是用字符串匹配的方式传参数进去使用qDebug(“%s”,qPrintable(QString string))。我以为这个就可以,RBL。

VS2017+Qt5.9 中文乱码

此时我感觉我已经是一种死????当作活????医的心态了。我将QString类型的字符串转成const char *类型,然后传参给qDebug()。

VS2017+Qt5.9 中文乱码

直到我快要崩溃的时候,我才看到有网友说要在代码中设置utf8,即添加#pragma execution_character_set("utf-8")  。

VS2017+Qt5.9 中文乱码

上面的6种输出方式最后有4种输出了中文没有乱码。最后……,嗯,行吧,给出正确的四种就行了。

VS2017+Qt5.9 中文乱码

总结一下:

主要就是添加全局代码设置utf8,即#pragma execution_character_set("utf-8")  ,其他的正常输出就好。

缺点:此方法会让C++的cout<<string;string中的中文出现乱码