admin管理员组

文章数量:1537077

在win7下编译了一个可执行程序,放到xp下执行,即使所有的中文已都用tr()包含起来,但中文仍为乱码。

在网上简单搜索了一下,看到类似的文章(http://www.xpsp3/jiaocheng/506.html),很好地解决所碰到的问题。


原来我的代码:

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));

    return app.exec();
}

修改后的代码:

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QTextCodec::setCodecForTr(QTextCodec::codecForName("System"));

    return app.exec();
}

前后的区别就在于:

前者我给tr()指定了一个常见的字符集,但就算是两个xp系统也不能保证字符集是相同的;

而后者则根据系统当前的字符集来设置tr()的字符集,这样更合理可靠些;


但是,把相关代码放到Linux系统下,重新编译执行,又是一大堆乱码,原因在于Windows中,用的是GB2312保存的代码,而Linux默认编码格式为UTF-8,因此,最终还是有中文显示的问题。

彻底解决的方法是:

1. 用tr()把所有用户可见的文字括起来,代码中只包含英文;

2. 用lupdate工具,提取所有用户可见的字符串,生成ts文件;

3. 用Qt Linguist翻译ts文件,并release,生成.qm文件;

4. 应用程序用QTranslator加载.qm文件;

当然,最好是把.qm文件作为一个资源文件,嵌入到可执行程序中。


参考:

http://devbean.blog.51cto/448512/244689

<<C++.GUI.Programming.with.Qt.4>>第18章 国际化

本文标签: 乱码中文程序XP