QT乱码总结8.编码测试和总结三

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中设置不生效的。不过整体还是和咱们刚刚测试差不多的。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值