网站编辑器做段落空格,网页设计公司,win wordpress运行环境,成都展厅设计企业字符乱码问题详解 1 编码字符集与字符编码方式2 字符乱码原因3 字符乱码解决方案 在解释字符乱码问题之前#xff0c;我们需要先理清一些基本概念 1 编码字符集与字符编码方式
编码字符集
编码字符集是所有字符以及对应代码值的集合。编码字符集中的每个字符都对应一个唯一的… 字符乱码问题详解 1 编码字符集与字符编码方式2 字符乱码原因3 字符乱码解决方案 在解释字符乱码问题之前我们需要先理清一些基本概念 1 编码字符集与字符编码方式
编码字符集
编码字符集是所有字符以及对应代码值的集合。编码字符集中的每个字符都对应一个唯一的代码值。常见的编码字符集ASCII字符集、GBXXXX字符集、BIG5字符集、Unicode字符集等。
字符编码方式
编码字符集中只规定了字符的代码值并未规定具体如何存储字符编码方式解决了字符在计算机中如何存储的问题它是将编码字符集中的字符代码值转换为实际的存储字节序列的一种映射规则。常见字符编码方式ASCII编码、GBXXXX编码、BIG5编码、UTF-8编码、UTF-16编码、UTF-32编码等。每种编码字符集至少对应一种字符编码方式也可以对应多种编码方式。
什么是字符的编码与解码? 编码就是把⼀个字符编码成二进制码存起来的方式而解码就是把这个二进制码按照原本编码的规则还原成原来的字符。
源字符集 源文件字符集是指源文件保存时按源字符集编码方式编码后的字符集。VS2019源字符集编码格式默认是GBK格式在利用VS编写代码时源代码会自动编码为GBK字符集。
执行字符集 程序运行时所使用的字符集编译器会将源字符集先按照源字符集编码方式进行解码再将解码后得到的字符按照执行字符集编码方式编码为执行字符集。执行字符集一般默认使用Windows系统本地字符编码若是简体中文系统则是GBK或GB2312字符集。
2 字符乱码原因
在编程中我们给某个函数输入中文字符串的时候在运行的时候中文字符串往往就会变成乱码这是因为编码方式与解码方式不一致造成的。
例 VSQT编译环境中如果直接将中文字符串传给QT函数时会出现乱码
QString s(你好);//乱码
qDebug() 路漫漫其修远兮;//乱码原因在于这些中文字符串被GBK编码为源字符集编译器会先采用GBK将这被GBK编码的源字符集解码再用GB2312编码为执行字符集而Qt5内部采用Unicode字符集UTF-16编码QT中的函数会将执行字符集使用UTF-8解码再使用UTF-16编码为unicode字符集QString内部使用UTF-8对执行字符集进行解码的时候与执行字符集编码格式不一致肯定会出现乱码现象。
为什么英文字符就不会出现乱码现象呢
英文字符通常都是ASCII字符编码常见的字符编码都会以某种形式“兼容”ASCII编码而我们接触比较多的UTF-8和GBK则是完全兼容ASCII也就是ASCII编码的数据在UTF-8、GBK中会是一样的数字形式一个字节。即 AB在ASCII编码中对应的是0x41和0x42在GB2312和UTF-8中还是0x41和0x42所以对于AB这两个字符用GB2312编码为0x41和0x42后采用UTF-8再进行解码得出来的仍然是AB所以不会出现乱码。
3 字符乱码解决方案
1使用QStringLiteral宏
从“字符串常量”创建QString对象
qDebug() QStringLiteral(路漫漫其修远兮);QStringLiteral宏它只能处理常量。
2使用fromLocal8Bit()函数
fromLocal8Bit是Qt 中QString 类的一个成员函数用于将使用本地编码的字符串转换为 QString 对象的内部 Unicode编码。
qDebug() QString::fromLocal8Bit(路漫漫其修远兮);使用QStringLiteral宏和fromLocal8Bit()函数输出的字符串还带有双引号 使用下面的这两个方法可以解决这种问题。
3使用#pragma execution_character_set(“utf-8”)
源程序中加上如下指令将源文件的可执行字符集编码方式设置为utf-8
#pragma execution_character_set(utf-8)qDebug() 路漫漫其修远兮;4使用u8关键字
C17到来后出现了u8关键字表示一个字符串的可执行字符集编码方式是UTF-8编码
qDebug() u8路漫漫其修远兮