在win7下编译了一个可执行程序,放到xp下执行,即使所有的中文已都用tr()包含起来,但中文仍为乱码。
在网上简单搜索了一下,看到类似的文章(http://www.xpsp3.com/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.com/448512/244689
<<C++.GUI.Programming.with.Qt.4>>第18章 国际化