加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码网 (https://www.900php.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Windows > 正文

完全解决QT中文码乱问题

发布时间:2021-12-14 12:59:56 所属栏目:Windows 来源:互联网
导读:读完本文,让你彻底明白Windows下中文乱码的问题。一劳永逸地解决这个困扰很多同学的问题。 前言 在桌面开发过程中,由于Qt的跨平台特性,以及更加先进的库封装。比起MFC,用着不知道要爽多少。Qt独创的信号槽机制,也大大方便了开发者。可以让开发者把更多
读完本文,让你彻底明白Windows下中文乱码的问题。一劳永逸地解决这个困扰很多同学的问题。
 
前言
在桌面开发过程中,由于Qt的跨平台特性,以及更加先进的库封装。比起MFC,用着不知道要爽多少。Qt独创的信号槽机制,也大大方便了开发者。可以让开发者把更多的精力放在业务的逻辑上,而不是语言和库的各种细节上。
 
可是,在使用的过程中,不少朋友在中文Windows系统下,遇到了乱码的问题。着实头痛,网上搜了一圈,有时能解决问题,有时不知道什么原因的情况下又出现了奇怪的问题。同样的问题在cocos2d-x中也会出现。
  
上面的问题来自《Cocos2d-x实战:C++卷》,大佬也很无奈啊。
 
今天,让我们来自己剖析一下这个问题。并最终找到一劳永逸的解决方案。
 
在开始前,我们先来罗列一下遇到的几种情况:
 
 完全正常。(人品大爆发啊)
 直接乱码。(哎,时运不济)
 编译报错——C4819,C2001、C2143。(这是犯了什么天条了吗?)
 很小心的使用,可能正常。有时正常,有时编译报错,有时末尾的字是乱码,前面的正常。(这是什么鬼啊)。
            细心的小伙伴还总结出了,偶数个中文字符正常,奇数个就不行了。后面再加个英文字符,前面的显示正常,后面一个字符乱码。(我也太难了吧~~~)
 
一、字符编码
要彻底理解这个问题,我们需要从字符编码说起,小伙伴们稍微有点耐心,这个其实很容易理解。字符编码说白了就是一张对照表。
 
1.1 ASCII编码
这个编码很容易,就用了一个字节进行编码,只能表示英文字符和标点符号。这里我就不过多赘述了,百度一下,就有很多文章有详细讲解。
 
1.2 中文编码
计算机刚开始被发明的时候,只有ASCII编码。也就是说只有英文,那我们怎么办呢?没有人帮我们做,那只有自己来了,在1980年,国家标准总局发布了GB2312,其实就是一张中文的编码对照表。这也不是很复杂的东西,因为单个字节只有256种可能,也就是说,最多只能表示256种字符。那么我们就再多用一个字节呗,在GB2312中,中文就用2个字节进行表示。2^16 = 65536,有这么多种可能,编码汉字绰绰有余了。
 
1.3 Unicode编码
在中国使用GBK编码方案的同时,其他国家和地区为了使用自己的文字,也纷纷进行对自己的语言文字进行编码。造成的结果就是,不通用!不同语音的操作系统下编辑的文档,在另一台不同语音的计算机中打开就是乱码。
 
随着全球化的发展,急需一种统一的编码方案,来解决这种混乱的局面。
 
二、文件编码
2.1 UTF-8编码
虽然上文中讲到ISO将字符进行了重新编码,并发布了Unicode。每个字符采用2个字节,16位进行编码。对于使用英语的国家来说,原来采用的是ASCII编码,那么所有的文件大小都会变成原来的2倍。这个浪费太大了,于是UTF-8就出现了。
 
如果用语言描述UTF-8,有些复杂。我们来举个例子,就很容易明白了。
 
比如,“中”这个字,Unicode编码为:0x4E2D。用二进制写就是(0100-1110-0010-1101),那么用UTF-8,怎么进行表示呢?
 
1110 0100
 
1011 1000
 
1010 1101
 
我来解释一下,第一个字节,前面的4位中有连续的3个1,表示这个字符需要有3个字节组成。
 
第二个字节,前面的2位10,表示上接前面的字节,后面的6位是编码。
 
第三个字节同第二个字节,前面的10和后面的编码。
 
也就是说,16位的Unicode编码,被分散到3个字节中。
 
好麻烦啊……的确,遇到中文或其他多字节编码的字符是有点麻烦,但是如果是英文字符,直接就用ASCII编码保存了。直接完全兼容原来的英文文档,他们就是有这么多的优越性,没办法,毕竟计算机技术来自他们那儿。
 
2.2 ANSI编码
这又是什么编码?细心的小伙伴会发现,你在Windows系统上用记事本编辑完文件,点另存为的时候,右下角默认的编码就是ANSI。这是Windows为了兼容各种不同的编码,而这样做的。
 
其实,他的做法非常简单,如果遇到小于127的编码,就是ASCII编码,计算机都认识这个编码,对于大于127的编码,也不用管那么多了,按原样保存就行了。

(编辑:源码网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读