QT_win7下编译的程序在xp中运行中文乱码问题

在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章 国际化

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值