Qt5.2中文测试

来源:互联网 发布:C语言编程改颜色 编辑:程序博客网 时间:2024/05/29 07:57

 

 环境:Qt5.2+QtCreator3.0+VS2010,并且VS2010安装了sp1的补丁。操作系统Windowsxp。


 

测试源代码:

 

   

    QString s1 = "我是中文1";
    qDebug()<<"s1"<<s1;
    //只要字符串不需要翻译,请关注这个
    QString s2 = QStringLiteral("我是中文2");
    qDebug()<<"s2"<<s2;
    QTextCodec *codec = QTextCodec::codecForLocale();
    QString s3 = codec->toUnicode("我是中文3");
    qDebug()<<"s3"<<s3;
    QTextCodec *codec2 = QTextCodec::codecForName("utf-8");
    QString s4 = codec2->toUnicode("我是中文4");
    qDebug()<<"s4"<<s4;
    QString s5 = QString::fromUtf8("我是中文5");
    qDebug()<<"s5"<<s5;
    QString s6 = tr("我是中文6");
    qDebug()<<"s6"<<s6;
    ui->label->setText(s1);
    ui->label_1->setText(s2);
    ui->label_2->setText(s3);
    ui->label_3->setText(s4);
    ui->label_4->setText(s5);
    ui->label_5->setText(s6);


测试一

测试环境:

执行字符集  设置了 #pragma execution_character_set("utf-8")

源码字符集utf-8,有 BOM

 

测试结果:

s1 "我是中文1"

s2 "我是中文2"

s3 "鎴戞槸涓枃3"

s4 "我是中文4"

s5 "我是中文5"

s6 "我是中文6" 

 

测试二

测试环境:

执行字符集  不设置#pragma execution_character_set("utf-8")

源码字符集utf-8,有 BOM

 

测试结果:

s1 "????????1"

s2 "我是中文2"

s3 "我是中文3"

s4 "????????4"

s5 "????????5"

s6 "????????6" 

 

 

 

 

测试三

测试环境:

执行字符集  不设置#pragma execution_character_set("utf-8")

源码字符集utf-8,无 BOM

 

测试结果:

 

s1 "我是中文1"

s2 "鎴戞槸涓枃2"

s3 "鎴戞槸涓枃3"

s4 "我是中文4"

s5 "我是中文5"

s6 "我是中文6" 

 

测试四

测试环境:

执行字符集  设置了#pragma execution_character_set("utf-8")

源码字符集utf-8,无 BOM

 

测试结果:

 

s1 "鎴戞槸涓枃1"

s2 "鎴戞槸涓枃2"

s3 "閹存垶妲告稉顓熸瀮3"

s4 "鎴戞槸涓枃4"

s5 "鎴戞槸涓枃5"

s6 "鎴戞槸涓枃6" 


      从上面的测试可以看出,在保存源代码时字符集最好是utf-8,有BOM,并且设置了执行字符集( #pragma execution_character_set("utf-8")   ),这样就能比较好的支持中文了。 

      当然也要确保你的VS2010打了sp1的补丁,否则测试结果就都不一样了。因为没打sp1补丁的vs2010,不识别( #pragma execution_character_set("utf-8")   )的设置。

补充: 上面测试一的s3还是乱码,是因为我们设置的是QTextCodec::codecForLocale();,如果改为QTextCodec::codecForName("utf-8");,则是正常显示。如下所示。

测试环境:

执行字符集  设置了 #pragma execution_character_set("utf-8")

源码字符集utf-8,有 BOM

    QTextCodec *codec = QTextCodec::codecForName("utf-8");
    QString s3 = codec->toUnicode("我是中文3");
    qDebug()<<"s3"<<s3;
结果:
   ss "我是中文ss" 


 

0 0