QT 编码问题

概念

  1. 源文件字符集:源文件本身也是文本文件,所以源文件字符集是指源文件保存时采用哪种字符编码。
  2. 执行字符集:可执行应用程序内使用何种字符编码。编译器会将源码字符集转换为执行字符集
  3. BOM标识符:识别源文件编码

QString中文显示乱码原因

Qt5中QString内部采用unicode字符集,utf-16编码。构造函数QString::QString(const char *str) 默认使用fromUtf8() 将str所指的执行字符集从utf-8转码成utf-16。
也就是说,默认情况下,QString需要执行字符集编码为utf-8,然后以utf-8进行解码,再编码为utf-16才能获得正确的字符编码。

utf-8源文件的处理方式

1.带BOM标识的utf-8源文件

  • 编译器正确识别编码
  • 执行字符集转为local字符集
  • QString使用fromLocal8Bit()转换

2.不带BOM标识的utf-8源文件

  • 编译器未识别编码,认为文件为local编码
  • 编译器不进行字符转换,执行字符集仍为utf-8编码
  • QString使用fromUtf8()转换

3.带BOM标识的utf-8源文件,使用预处理命令#pragma execution_character_set(“utf-8”),将执行字符集设置为utf-8

  • 编译器正确识别编码
  • 执行字符集转为utf-8编码
  • QString使用fromUtf8()转换

4.不带BOM标识的utf-8源文件,使用预处理命令#pragma execution_character_set(“utf-8”),将执行字符集设置为utf-8

  • 编译器未识别编码,认为文件为local编码
  • 编译器以local转utf-8编码的方式进行转码,生成错误的utf-8编码
  • QString无法正确识别

QT5常见做法

  1. 默认编码设置为utf-8,不添加BOM(如果存在则保留)
  2. 如果添加了带有BOM的utf-8源文件,执行字符集默认转为local字符集。此时,需添加预处理命令“#pragma execution_character_set(“utf-8”)”设置执行字符集(否则需要调用fromLocal8Bit()转换)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值