通常在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