qt4 中文乱码处理

UCS-2, UTF-8 和 UTF-16

● Unicode 编码刚开始的时候, 曾经只有 65536 个字符空间。这个空间被称为「基本多文种平面」。用恒定的两个字节表示所有字符,这种编码方式被称为 UCS-2 。
● 当 Unicode 字符超过 65536 之后,参考「多字节编码」,通过双字节扩展四字节的方式表示所有字符。这种编码方式被称为 UTF-16 。
● 为了便于网络传输和数据处理,不至于因为遇到“ \0” 而错误地以为文本结束,以及兼容 ASCII 码, UTF-8 被定义。 UTF-8 的每一个字符按规则编码为 1 ~ 4 任一字节组合。中文通常为 3 字节长。
● 当然,也有直接使用 4 字节编码所有字符的编码方式,被称为 UTF-32 或者UCS-4 。

Windows 的历史遗留问题

● 在 Unicode 尚未成熟的年代, Windows 是使用各个国家的多字节编码,来支持每个国家的语言的。
● 自 WinNT 发布之后, Windows 内核的 API 全部改成使用UTF-16 的编码方式,以更好地支持多语言。但是由于历史原因, Windows 仍然保留多字节编码的 API 。 UTF-16 的 API以 W 结尾,而多字节编码以 A 结尾。
         例如 CreateWindowA 和 CreateWindowW 。

源文件中的「多字节编码」是什么?

● 如果不特别说明, Qt 4.x 会认为源文件的编码是 Latin-1 (西欧语言多字节编码)。当然, Qt 5.x 已经修正这个坏习惯,默认源文件是 UTF-8来着。不过谁叫我们现在还在用 4.8 呢?

● 就像 std::string 做的一样, QString 可以在必要的时候由 const char* 隐式 或 显 式 转 换 而 成 。 这 个 过 程 中 使 用 的 编 码 , 就 是QTextCodec::codecForCStrings 。
● Qt 有一个函数, QObject::tr ,也可以将 const char*  转换为 QString 。这个过程中使用的编码方式由 QTextCodec::codecForTr 指定。
● 另外 QTextCodec::codecForLocale 表明当前系统所用编码。一般中文Windows 应该是 GBK 。中文 Linux 则一般为 UTF-8 。

那么到底如何解决中文乱码问题呢?

1、 Qt Creator 保存源文件的编码:

2、main中添加

QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf-8"));

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值