QT乱码总结0.Qt乱码产生因素
https://blog.csdn.net/liujiayu2/article/details/103167953
QT乱码总结1.Unicode 和 UTF-8
https://blog.csdn.net/liujiayu2/article/details/103168020
QT乱码总结2.gbk和ANSI和gb2312的区别
https://blog.csdn.net/liujiayu2/article/details/103168168
QT乱码总结3.UNICODE有无BOM
https://blog.csdn.net/liujiayu2/article/details/103168236
QT乱码总结4.细谈本地编码
https://blog.csdn.net/liujiayu2/article/details/103168249
QT乱码总结5.万能解决方案
https://blog.csdn.net/liujiayu2/article/details/103168272
QT乱码总结6.编码测试和总结一
https://blog.csdn.net/liujiayu2/article/details/103168289
QT乱码总结7.编码测试和总结二
https://blog.csdn.net/liujiayu2/article/details/103168301
QT乱码总结8.编码测试和总结三
https://blog.csdn.net/liujiayu2/article/details/103168307
QT乱码总结9.编码测试和总结四
https://blog.csdn.net/liujiayu2/article/details/103168317
QT乱码总结编码测试工程:
https://download.csdn.net/download/liujiayu2/11987065
/测试环境/
操作系统:WIN7 简体中文版
编译器:VS2010英文版和VS2013 中文版
/测试原因
上两次测试环境的区别,vs从10到13,qt从4.8.6到5.7。有两个不同之处出现了
1.QString默认加载编码
2.预编译指令#pragma execution_character_set是否有用。
由于测试环境不是单一变量,也不好说是哪种原因导致的这种变化。心想着最好能试试vs2010 + Qt5.7 版本 和 vs2013 + Qt4.8.6版本,这样才好区分到底是什么原因导致的嘛。可是事与愿违,事实上Qt5.7是不支持vs2010的,Qt4.8.6也不支持vs2010(官方没有对应的下载包)。所以才有了本篇测试,只测VS不测QT.
/测试编码
我爱中国
ANSI(GBK)编码:CE D2 B0 AE D6 D0 B9 FA
UTF-8编码:E6 88 91 E7 88 B1 E4 B8 AD E5 9B BD
UTF-8编码(bom):EF BB BF E6 88 91 E7 88 B1 E4 B8 AD E5 9B BD
UNICODE编号:\u6211\u7231\u4e2d\u56fd
/
/测试代码/
#include "stdafx.h"
//#pragma execution_character_set("utf-8")
int _tmain(int argc, _TCHAR* argv[])
{
printf("我爱中国");
getchar();
return 0;
}
/
/
测试1:
编译器:VS2010
文件编码:ANSI (VS创建默认使用编码)
是否使用#pragma execution_character_set:否
测试结果:
正常现象,不做分析
/
测试2:
编译器:VS2010
文件编码:UTF-8带BOM
是否使用#pragma execution_character_set:否
测试结果:
UTF-8带BOM结果和ANSI一样。可见这个与qt无关,window平台下,vs编译器,文件采用UTF-8带BOM或者ANSI编码,结果是一样的。
/
测试3:
编译器:VS2010
文件编码:UTF-8无BOM
是否使用#pragma execution_character_set:否
测试结果:
/
测试4:
编译器:VS2010
文件编码:UTF-8无BOM
是否使用#pragma execution_character_set:
分别使用
#pragma execution_character_set("utf-8")
#pragma execution_character_set("gb2312")
#pragma execution_character_set("AAAA")
测试结果:
结果显示,无论#pragma execution_character_set怎么设置在vs2010下等于没有。
/
测试5:
编译器:VS2013
文件编码:ANSI (VS创建默认使用编码)
是否使用#pragma execution_character_set:否
测试结果:
正常现象,不做分析
/
测试6:
编译器:VS2013
文件编码:UTF-8无BOM
是否使用#pragma execution_character_set:否
测试结果:
正常现象,不做分析
/
测试7:
编译器:VS2013
文件编码:UTF-8无BOM
是否使用#pragma execution_character_set:
分别使用
#pragma execution_character_set("utf-8")
#pragma execution_character_set("gb2312")
#pragma execution_character_set("AAAA")
测试结果:
UTF-8无BOM + #pragma execution_character_set("utf-8")
UTF-8无BOM + #pragma execution_character_set("gb2312")
UTF-8无BOM + #pragma execution_character_set("AAAA")
ANSI + #pragma execution_character_set("utf-8")
ANSI + #pragma execution_character_set("gb2312")
ANSI + #pragma execution_character_set("AAAA")
本次测试和前面两次测试总结:
1.默认编码是Qt相关的,与VS版本无关,想想这也很好理解,毕竟默认编码说的QString默认加载方式。
Qt4.8.6中QString 默认编码 Latin-1。
Qt5.7中QString 默认编码utf-8
2. #pragma execution_character_set在vs2013中生效,在2010中不生效,并且只有
#pragma execution_character_set("utf-8")有用,其他的等同于没有,这个情况再测测吧,不应该这样的啊,是不是gb2312写错了。
刚刚上网查了一下资料,QString从5.0以后默认采用utf-8编码。
#pragma execution_character_set这个指令仅支持utf-8。只在vs编译器中生效。vs2015以后就过期了。说_VS_VER>=1600才生效,1600就是vs2010,咱们测试结果是2010中设置不生效的。不过整体还是和咱们刚刚测试差不多的。