QT下中文字符编码的转换

时间:2021-09-29 07:42:04

通常在qt程序的main函数中,经常会有设置字符编码的函数:

 

QTextCodec::setCodecForTr(QTextCodec::codecForName("GB18030"));  //为QObject::tr设置字符编码

QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB18030"));  //如果在linux上,设置local为gb18030可能会导致读取

                                                                                                               //或输出的unicode中文字符不能正确显示

QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB18030"));  //为QString设置字符编码,默认情况下为Latin1


比如之后,就可以输入

QLabel *testLabel = new QLabel( tr("测试") );

这样,不管是在windows上还是在X11平台上,就可以看到正确的显示结果了。


另外,在windows下,代码中输入的字符默认中文编码是GBK,但Linux上默认的中文编码的UNICODE,所以将windows上编写的含有中文qt代码,拿到linux上的QT creator修改时,首先要选择中文编码格式,否则代码中的汉字就会是乱码。

常用的GBK转换UTF8的代码如下,用了http://blog.csdn.net/ACCP_2008123456/archive/2010/11/05/5988704.aspx上的例子

 

    QTextCodec *gbk = QTextCodec::codecForName("gb18030");
    QTextCodec *utf8 = QTextCodec::codecForName("utf-8");

 

    QTextCodec::setCodecForTr(gbk);
    QTextCodec::setCodecForLocale(gbk);


    QString utfStr = QObject::trUtf8(readByte);    //utf-8
    QString gbkStr = QObject::tr("中文");          // gbk


    QString utf2gbk = gbk->toUnicode(readStr.toLocal8Bit());                  // utf8 conver  gbk
    QString gbk2utf1 = utf8->toUnicode(utf2gbk.toUtf8());                       // gbk  convert utf8
    QString g2u = gbk->toUnicode(gbk->fromUnicode(readStr));            // gbk  convert utf8