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的區(qū)別
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
?
/測試環(huán)境/
操作系統:WIN7 簡體中文版
編譯器:VS2010英文版和VS2013 中文版
/測試原因
上兩次測試環(huán)境的區(qū)別,vs從10到13,qt從4.8.6到5.7。有兩個不同之處出現了
1.QString默認加載編碼
2.預編譯指令#pragma execution_character_set是否有用。
由于測試環(huán)境不是單一變量,也不好說是哪種原因導致的這種變化。心想著最好能試試vs2010 + Qt5.7 版本 和 vs2013 + Qt4.8.6版本,這樣才好區(qū)分到底是什么原因導致的嘛。可是事與愿違,事實上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創(chuàng)建默認使用編碼)
是否使用#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創(chuàng)建默認使用編碼)
是否使用#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中設置不生效的。不過整體還是和咱們剛剛測試差不多的。
?
?
?
總結
以上是生活随笔為你收集整理的QT乱码总结8.编码测试和总结三的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QT乱码总结7.编码测试和总结二
- 下一篇: QT乱码总结9.编码测试和总结四