QT乱码总结7.编码测试和总结二
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.编码测试和总结二相关推荐
- QT乱码总结9.编码测试和总结四
QT乱码总结0.Qt乱码产生因素 https://blog.csdn.net/liujiayu2/article/details/103167953 QT乱码总结1.Unicode 和 UTF-8 h ...
- QT乱码总结8.编码测试和总结三
QT乱码总结0.Qt乱码产生因素 https://blog.csdn.net/liujiayu2/article/details/103167953 QT乱码总结1.Unicode 和 UTF-8 h ...
- QT乱码总结6.编码测试和总结一
QT乱码总结0.Qt乱码产生因素 https://blog.csdn.net/liujiayu2/article/details/103167953 QT乱码总结1.Unicode 和 UTF-8 h ...
- QT乱码总结4.细谈本地编码
QT乱码总结0.Qt乱码产生因素 https://blog.csdn.net/liujiayu2/article/details/103167953 QT乱码总结1.Unicode 和 UTF-8 h ...
- QT乱码总结5.万能解决方案
QT乱码总结0.Qt乱码产生因素 https://blog.csdn.net/liujiayu2/article/details/103167953 QT乱码总结1.Unicode 和 UTF-8 h ...
- QT乱码总结3.UNICODE有无BOM
QT乱码总结0.Qt乱码产生因素 https://blog.csdn.net/liujiayu2/article/details/103167953 QT乱码总结1.Unicode 和 UTF-8 h ...
- QT乱码总结2.gbk和ANSI和gb2312的区别
QT乱码总结0.Qt乱码产生因素 https://blog.csdn.net/liujiayu2/article/details/103167953 QT乱码总结1.Unicode 和 UTF-8 h ...
- QT乱码总结1.Unicode 和 UTF-8
QT乱码总结0.Qt乱码产生因素 https://blog.csdn.net/liujiayu2/article/details/103167953 QT乱码总结1.Unicode 和 UTF-8 h ...
- QT乱码总结0.Qt乱码产生因素
QT乱码总结0.Qt乱码产生因素 https://blog.csdn.net/liujiayu2/article/details/103167953 QT乱码总结1.Unicode 和 UTF-8 h ...
最新文章
- python樱花树画法图片_用Python敲出樱花绽放 | 附代码
- 如何将自己的站点与Ucenter整合——详解
- rust(51)-rust工具,prelude
- React 中 keys 的作用是什么?
- 获取class文件对象三种方式
- vim 编译 Python 代码提示配置
- 制图折断线_【机械制图】机械设计中的尺寸标注,看懂复杂机械图纸!
- php7.2 event扩展php_sockets_le_socket错误解决
- react js 按条数 展开/折叠
- 软件工程教学博客 (备份)
- Mysql 5 replication(mysql主从双机策略)
- ArcGIS数据编辑操作
- SEO搜索引擎优化 | hexo
- php mysql日程管理_9.3 日程表数据库设计
- linux下录音识别成文字软件下载,录音转文字分享助手
- 滴滴云服务器搭建网站的一键脚本,一键搭建流控脚本 一键搭建云免流服务器...
- LattePanda 安装ubuntu 20.04 和 openvino
- 【C#】WPF的xaml中定义的Trigger为什么有时候会不管用,如Border的MouseOver之类的
- 网站客服系统_网页客服系统安装使用_GOFLY在线客服系统
- linux 命令中的大于号、小于号的作用