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

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

使用编码函数或方式:无

测试结果:

和测试二结果一样

/

测试2:

文件编码:UTF-8没有BOM

使用编码函数或方式:无

测试结果:

和测试二结果一样

/

测试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") 不起作用

 

 

 

大总结:

Creator只是一种编辑器,编译器用的MSVC2013。

结果显示,这和直接是vs2013结果是一样一样的。

 

猜你喜欢

转载自blog.csdn.net/liujiayu2/article/details/103168317
今日推荐