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 简体中文版

编译器:VS2013 中文版

QT版本:Qt 5.7

(本次测试和上次相比存在两个变量,vs从10到13,qt从4.8.6到5.7。不是单一变量,但是也有一定参考价值)

/测试编码

我爱中国

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

/

/测试代码/

//#pragma execution_character_set("AAAAA")

//#pragma execution_character_set("gb2312")

#pragma execution_character_set("utf-8")

//#pragma execution_character_set("big5")

Widget::Widget(QWidget *parent) :

QWidget(parent),

ui(new Ui::Widget)

{

ui->setupUi(this);

setWindowTitle("CodecStudy_Creator");

QString str("我爱中国");

ui->lineEdit->setText(str);

std::string strStdString = str.toStdString();

std::wstring strStdWString = str.toStdWString();

QString hexShow;

for (int i=0; i<strStdString.length(); i++)

{

unsigned char curChar= (unsigned char)strStdString.at(i) ;

char buf[6]={0};

sprintf(buf,"%02x ",curChar);

hexShow += buf;

}

ui->lineEditHex->setText(hexShow);

QString unicodeShow;

QChar qcharArray[20]={0};

for (int i=0;i<str.count();i++)

{

QChar qchar = str.at(i);

qcharArray[i] = qchar;

char buf[7]={0};

const ushort shortChar = qchar.unicode();

sprintf(buf,"\\u%04x ", shortChar);

unicodeShow += buf;

}

ui->lineEditUnicode->setText(unicodeShow);

int a = 0;

}

/

/

测试1:

文件编码:ANSI

使用编码函数或方式:无

测试结果:

总结:

虽然还是乱码,但是看得出来和上次测试乱码乱出来的字符不一样,猜测这种加载方式不是按照Latin-1进行加载的。

/

测试2:

文件编码:UTF-8没有BOM

使用编码函数或方式:无

测试结果:

总结:

出现正常编码很是意外,那就说明Qt5.7+VS2013是中的QString默认是按照utf-8进行加载的。但是究竟是qt5.7发生了改变哈市vs2013发生了改变我们不得而知,但是大胆猜测是QT5.7相比较qt4.8.6而发生的改变。

/

测试3:

文件编码:UTF-8有BOM

使用编码函数或方式:无

测试结果:

总结:

从十六进制可以看出,文件编码采用带有BOM的utf-8编码的时候,字符串进行编码的时候采用的是本地编码gbk而不是utf-8编码。说明问题无论QT版本怎么变,或者vs版本怎么变,带有BOM的utf-8总是和本地编码gbk一致。

/

测试6:

使用编码函数或方式:QString::fromLocal8Bit

文件编码:ANSI、UNICODE无BOM、UNICODE有BOM

测试结果:

QString::fromLocal8Bit + ANSI文件(或者UNICODE带BOM) =  正确显示

QString::fromLocal8Bit + UNICODE不带BOM文件  =  乱码

原因分析:

和上次结果一致。只是默认采用的加载编码不一样。一旦指定了加载编码,那就都一样咯。

/

测试10:

使用编码函数或方式:QObject::tr

文件编码:ANSI、UNICODE无BOM、UNICODE有BOM

测试结果:

有与没有完全一样。

这个很奇怪,上篇讲到这个函数是和QTextCodec::setCodecForTr联合使用的,为什么去掉了setCodecForTr却没有去掉QObject::tr???

/

测试11:

使用编码函数或方式:QObject:: trUtf8

文件编码:ANSI、UNICODE无BOM、UNICODE有BOM

测试结果:

效果等同与QString::fromUtf8(),这种环境下本身默认就是这样加载的,所以有与没有效果完全一样。

/

测试12:

使用编码函数或方式:#pragma execution_character_set("utf-8")

文件编码:ANSI、UNICODE无BOM、UNICODE有BOM

测试结果:

ANSI + #pragma execution_character_set("utf-8")  = 正常

UNICODE无BOM + #pragma execution_character_set("utf-8")  = 乱码

总结1:

使用了#pragma execution_character_set("utf-8") 起到了明显作用

ANSI + #pragma execution_character_set("gb2312")  = 乱码

UNICODE无BOM + #pragma execution_character_set("gb2312")  =正常

总结2:

使用了#pragma execution_character_set("2312") 不起作用

QT乱码总结7.编码测试和总结二相关推荐

  1. QT乱码总结9.编码测试和总结四

    QT乱码总结0.Qt乱码产生因素 https://blog.csdn.net/liujiayu2/article/details/103167953 QT乱码总结1.Unicode 和 UTF-8 h ...

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

    QT乱码总结0.Qt乱码产生因素 https://blog.csdn.net/liujiayu2/article/details/103167953 QT乱码总结1.Unicode 和 UTF-8 h ...

  3. QT乱码总结6.编码测试和总结一

    QT乱码总结0.Qt乱码产生因素 https://blog.csdn.net/liujiayu2/article/details/103167953 QT乱码总结1.Unicode 和 UTF-8 h ...

  4. QT乱码总结4.细谈本地编码

    QT乱码总结0.Qt乱码产生因素 https://blog.csdn.net/liujiayu2/article/details/103167953 QT乱码总结1.Unicode 和 UTF-8 h ...

  5. QT乱码总结5.万能解决方案

    QT乱码总结0.Qt乱码产生因素 https://blog.csdn.net/liujiayu2/article/details/103167953 QT乱码总结1.Unicode 和 UTF-8 h ...

  6. QT乱码总结3.UNICODE有无BOM

    QT乱码总结0.Qt乱码产生因素 https://blog.csdn.net/liujiayu2/article/details/103167953 QT乱码总结1.Unicode 和 UTF-8 h ...

  7. QT乱码总结2.gbk和ANSI和gb2312的区别

    QT乱码总结0.Qt乱码产生因素 https://blog.csdn.net/liujiayu2/article/details/103167953 QT乱码总结1.Unicode 和 UTF-8 h ...

  8. QT乱码总结1.Unicode 和 UTF-8

    QT乱码总结0.Qt乱码产生因素 https://blog.csdn.net/liujiayu2/article/details/103167953 QT乱码总结1.Unicode 和 UTF-8 h ...

  9. QT乱码总结0.Qt乱码产生因素

    QT乱码总结0.Qt乱码产生因素 https://blog.csdn.net/liujiayu2/article/details/103167953 QT乱码总结1.Unicode 和 UTF-8 h ...

最新文章

  1. python樱花树画法图片_用Python敲出樱花绽放 | 附代码
  2. 如何将自己的站点与Ucenter整合——详解
  3. rust(51)-rust工具,prelude
  4. React 中 keys 的作用是什么?
  5. 获取class文件对象三种方式
  6. vim 编译 Python 代码提示配置
  7. 制图折断线_【机械制图】机械设计中的尺寸标注,看懂复杂机械图纸!
  8. php7.2 event扩展php_sockets_le_socket错误解决
  9. react js 按条数 展开/折叠
  10. 软件工程教学博客 (备份)
  11. Mysql 5 replication(mysql主从双机策略)
  12. ArcGIS数据编辑操作
  13. SEO搜索引擎优化 | hexo
  14. php mysql日程管理_9.3 日程表数据库设计
  15. linux下录音识别成文字软件下载,录音转文字分享助手
  16. 滴滴云服务器搭建网站的一键脚本,一键搭建流控脚本 一键搭建云免流服务器...
  17. LattePanda 安装ubuntu 20.04 和 openvino
  18. 【C#】WPF的xaml中定义的Trigger为什么有时候会不管用,如Border的MouseOver之类的
  19. 网站客服系统_网页客服系统安装使用_GOFLY在线客服系统
  20. linux 命令中的大于号、小于号的作用

热门文章

  1. SpringMVC快速入门-开发步骤
  2. 类的加载连接和初始化
  3. 运行第一个docker容器
  4. 原型模式codeing
  5. Java8函数式编程(4)--collector(收集器)
  6. mysql+encode+decode+错误_mysql decode encode 乱码问题
  7. linux编译安装mysql5.1.x
  8. 网络原理(四)-----动态路由协议篇
  9. mysql怎样查询表的信息!
  10. Spring的声明式事务管理