QT中文乱码深度剖析

来源:互联网 发布:k3无法数据引出 编辑:程序博客网 时间:2024/06/06 01:16

为了彻底弄清QT以及MSVC的工作原理, 下面用4个例子来实战



笔的UTF-8的表示为\XE7 \XAC \X94,GB2312的表示为\XB1 \XCA


1.


    QString string1("笔");    qDebug() << string1;    qDebug() << string1.toUtf8() ;    qDebug() << string1.toLocal8Bit() ;

2.  

       代码同上, 我们在文件头部加上

#pragma execution_character_set("utf-8")


3.

        QString string("笔");        qDebug()  << FindWindow(NULL, "笔");        qDebug()  << FindWindow(NULL, string.toUtf8());        qDebug()  << FindWindow(NULL, string.toLocal8Bit());
4.

   代码同上, 我们在文件头部加上

#pragma execution_character_set("utf-8")



实验结果
有几点说明.
1. 由于我们的QTCreator里面BOM是Adding IF Encoding is UTF-8, 所以compiler input也会是UTF-8.
2. 当我们在C++头部文件加入#pragma execution_character_set("utf-8")时, compiler output会是UTF-8, 否则默认是GB2312
3. 当toUtf8()不能解释时会用EF BF BD来替换
4. 当toLocal8Bit()不能解释时会用3F 来替换
5. FindWindow中的名字要跟系统中窗口的名字比较, 而系统的窗口的名字编码为GB2312.


1 0
原创粉丝点击