琐记(三):Qt中文编码

  《精通Qt4编程》一书2.2节一段代码如下:

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTextCodec::setCodecForTr(QTextCodec::codecForName(
"gb18030"));
QTranslator translator;
  {
    ........
  }
  .....
}

这是一个登录框程序的一部分,编译无报错,运行时Qt creator的Application output中显示一行乱码,对话框也是乱码。于是google发现网上有详细说明,总结起来就是,在QT中默认的是unicode,windows中为GBK,linux中为UTF-8编码,可见此书应是在windows下的实例,而我使用的是ubuntu,gb18030自然是行不通的,因此更为utf-8中文显示就正常了。

  通常在windows环境下,对于中文编码,需要在main.cpp中加上以下几行代码:

    QTextCodec *gbk = QTextCodec::codecForName("gb18030"); 

    QTextCodec::setCodecForTr(gbk);  // 设置传给tr函数时的默认字符串编码,GUI设计中最常用的一种
    QTextCodec::setCodecForLocale(gbk); // 设置对本地文件系统读写时候的默认编码格式,比如读取文件或qDebug()打印输出信息时
    QTextCodec::setCodecForCStrings(gbk); //设置字符常量或者QByteArray构造QString对象时使用的编码方式

  同理,linux下:

    QTextCodec *utg8 = QTextCodec::codecForName("utf-8");

    QTextCodec::setCodecForTr(utg8 );
    QTextCodec::setCodecForLocale(utg8 );
    QTextCodec::setCodecForCStrings(utg8 );

  至于当时编译器中的那行乱码是程序提示“没有支持中文的QT……”,原因是我把translations敲成tranlators了,自然就找不到翻译文件。

posted @ 2011-05-14 21:21  风抚弦  阅读(925)  评论(0编辑  收藏  举报