Qt中文乱码问题解决办法【转】

本文介绍了在使用QT框架时遇到的中文乱码问题及其解决方法。通过对比不同编码设置方式的效果,推荐了一种较为可靠的解决方案,并提到了字体选择对显示效果的影响。
 
也许你在用这个方法实现中文化,但它确实不够严谨
Laguage» C++ Title» 出现频率最高的办法
  1. #include <QTextCodec>  
  2. int main(int argc, char *argv[]) 
  3. {  
  4.            QApplication app(argc, argv);  
  5.            //设置中文开始
  6.            QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030")); 
  7.            //设置中文结束
  8.            return app.exec();  
  9. }  


很多地方都会告诉你,这样可以实现QT支持中文,包括我看的教程书上也是,他甚至告诉我要支持中文必须加入这段代码,但我想告诉你,这个办法是有问题的,而且这个问题还不小!我在两台同样是XP系统的机子上移植就出现了中文乱码问题,而且所有中文都是用了tr()的。所以请别迷信那些教程,实践才是真理!

你可以尝试这个方法
Laguage» C++ Title»
  1. #include <QTextCodec>  
  2. int main(int argc, char *argv[]) 
  3. {  
  4.            QApplication app(argc, argv);  
  5.            //设置中文开始
  6.            QTextCodec *codec = QTextCodec::codecForName("GB2312");  
  7.            QTextCodec::setCodecForLocale(codec);  
  8.            QTextCodec::setCodecForCStrings(codec);  
  9.            QTextCodec::setCodecForTr(codec);  
  10.            //设置中文结束
  11.            return app.exec();  
  12. }  

虽然这个方法看似更为严谨,你可以尝试,不过这么写还是会有问题,至少没有解决我的问题。这也是我网上看到的出现频率也挺高的方法,不过我想说的是:其实这个办法治标不治本,因为它后面只是对拓宽对中文支持的范围,而一般我们都建议把中文写在tr(“”)里。

推荐个比较保险的办法
Laguage» C++ Title» 我推荐的方法
  1. int main(int argc, char *argv[]) 
  2. {
  3.     QApplication a(argc, argv);
  4.     QTextCodec *codec = QTextCodec::codecForName("System");    //获取系统编码
  5.     QTextCodec::setCodecForLocale(codec);
  6.     QTextCodec::setCodecForCStrings(codec);
  7.     QTextCodec::setCodecForTr(codec);
  8.     return a.exec();
  9. }

这里获取了系统字体编码,解决了我的问题,个人也觉得这个办法应该是个不错的解决方案。

也可能是字体选择不当造成的乱码

如果你始终解决不了乱码问题,可以尝试设置下字体,但其实是否是字体造成的乱码的方法很简单,如果出现的是一个个方块,便是字体设置不当,否则,优先考虑编码设置。

 

转自 http://www.ctogo.net/313.html































































### 嵌入式Linux环境下Qt显示中文乱码解决方案 在嵌入式Linux环境中,如果遇到Qt应用中的中文字符显示为乱码的情况,可能的原因主要包括字体支持不足、编码设置不正确以及环境变量配置不当等问题。以下是针对该问题的具体分析和解决办法: #### 字体支持 确保目标设备上有适合的中文字体文件,并将其加载到Qt的应用程序中。可以通过以下方式实现: 1. 将所需的中文字体(如SimSun.ttc或其他常见中文字体)复制到目标板上的指定目录。 2. 修改`fontconfig`配置文件或通过代码动态注册字体[^3]。 ```cpp QFontDatabase::addApplicationFont("/path/to/SimSun.ttf"); ``` 上述代码可以用来向应用程序添加自定义字体文件。 #### 编码设置 确认源代码文件保存时使用的编码格式是否统一为UTF-8无BOM格式。此外,在读取外部资源(如文本文件或数据库数据)时也需要保证其编码一致性。对于字符串处理部分,建议显式换编码以避免潜在错误[^4]。 ```cpp QString str = QString::fromUtf8("你好世界"); ``` 此示例展示了如何将UTF-8编码的数据化为内部表示形式以便于后续操作。 #### 环境变量调整 适当设置一些影响国际化行为的关键环境变量可以帮助改善多语言支持效果。例如: - `LANG`: 定义整个系统的默认区域选项; - `LC_ALL`: 覆盖所有其他本地化参数; - `QT_IM_MODULE`: 指定输入法模块名称; 具体命令如下所示[^5]: ```bash export LANG=zh_CN.UTF-8 export LC_ALL=zh_CN.UTF-8 export QT_IM_MODULE=qtvirtualkeyboard ``` 执行以上指令后重启相关服务或者重新启动会话使更改生效。 #### 测试验证 完成上述步骤之后构建项目并部署至实际硬件平台之上进行测试观察现象是否有改观。如果仍然存在问题,则进一步排查是否存在遗漏之处或者是特定场景下的特殊需求未满足情况。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值