QT中文乱码深度剖析

为了彻底弄清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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值