在项目开发中,经常会遇到文本编码问题。 文本编码知识是非常基础的,但是对于新手来说,可能需要很长时间才能尝试在自己的头脑中建立对编码的正确理解。 文本编码的原理并不难。 难的是在项目实践中掌握处理文本编码的正确方法。 本文从项目实践出发,总结了项目中编码处理的相关经验。 希望能够帮助基础薄弱的同学快速建立对的基本了解,同时减少实际项目中陷入陷阱的机会。

1. 从不同角度看数据 1.1 最底层的计算机角度

从计算机最底层的角度来看,计算机中的数据,无论是寄存器中的数据、内存中的数据,还是磁盘上的文件数据,都是以0和1的二进制格式存储的。因此,在谈论时二进制数据,一般是从计算机最底层的角度来看。

1.2 计算机应用视角

应用程序在计算机中处理数据时,只有遵循数据创建者设定的数据格式约定并对数据进行处理,才能正确提取文件内容创建者想要表达的信息。

文件创建者通常使用文件扩展名来指示文件内容的格式。 常见的文件格式后缀包括:.jpg、.txt、.mp4等。

在处理数据时,是否遵循数据格式约定完全由应用程序决定。 数据可以按照程序认为的任何格式进行处理。 如果以与协议不一致的格式处理数据,从数据中提取的信息很可能会混乱且无用。 例如,如果使用文本编辑器打开一张图片,那么文本编辑器最终显示的内容将是一堆无法阅读的乱码。 这也是实际项目中出现乱码问题的原因。

2. 文本乱码问题分析 2.1 文本编码简介

将世界上所有的符号、文字进行编号,生成一个字符表,称为“字符集”。 这样我们就可以用数字来表示字符,每个数字占用相同的字节数。 由于世界上的字符很多,所以一般采用32位无符号整数来存储数字,总共可以表示大约42亿个字符。 目前常见的字符集是字符集。

在字符集中,有些字符使用频率较高,有些字符使用频率较低。 使用相同字节长度的数字会浪费存储空间。 改进的存储方案类似于哈夫曼编码:常用的字符用较少的字节表示,不常用的字符用较长的字节表示。 优化的存储方法称为“文本编码”。

文本编码格式有很多种,比如GBK、UTF-8等,目前最常用的文本编码格式是UTF-8。 编码的具体实现不是本文的主要内容,因此不再展开。

2.1 乱码原因

由于计算机最早是外国人发明的,各种文本编码格式与英文最为兼容,所以英文通常不会出现乱码。 当同一个汉字采用不同的文本编码格式进行编码时,对应的二进制数据是不同的。 反之,如果使用不同的编码对同一份文本数据进行解码,则会解析出完全不同的文本内容。

一般来说,出现乱码的原因有两种:

2.2 乱码如何处理

根据文本乱码的原因,当我们遇到乱码问题时,需要排查以下问题:

2.3 Qt对文本编码处理的支持

Qt 提供了许多用于文本编码和解码的函数和类接口。 如下:

接口说明

::() 系列静态函数

如::,::,::等,提供常用的文本解码接口。 解码结果统一为UTF-16编码格式并存储在缓冲区中。

::toXXX() 系列静态函数

如::,::,::等,提供常用的文本编码接口。 编码后的文本数据保存在缓冲区中。

种类

提供更强大的编码转换功能,可以通过文本编码名称获取对应的文本编解码器。 可以实现各种文本编码之间的编码转换。

这里必须提到 和 之间的区别。

类型差异

输入的数据只是二进制数据。 可以看作是一个内存区域,仅此而已。 从低级计算机的角度来看,它用于数据存储。 可以根据业务需求确定数据格式类型,然后进行数据处理。

存储文本。 从计算机应用的角度来看,它用于文本内容的存储。 可以直接用于界面内容展示、文本信息处理等应用层面。

在项目中,我们通常会使用缓存数据。 如果中存储的数据是文本,那么下一步就是确定文本的编码格式。 最后可以使用或者提供文本编码转换接口来转换数据的编码,最终得到。 反过来,我们也可以将其保存为多种文本编码格式进行保存或传输。

3、容易出现乱码的应用场景 3.1 处理含有汉字的文件

当我们读写文本文件时,必须使用一致的文本编码。 否则,读取的数据会出现严重乱码,影响程序稳定性,甚至造成严重后果。 无论是读还是写文件,都必须考虑文本编码问题。

3.2 含有中文的代码文件出现乱码

在使用Qt+MSVC进行互联网开发时,我们经常会遇到代码编译失败或者程序运行时出现乱码等问题。 原因是MSVC默认认为源代码是GBK编码。 打开 Qt .pro 文件中的以下编译开关,并告诉 MSVC 编译器使用 UTF-8 格式处理源文本。 这可以解决:

QMAKE_C_FLAGS += /utf-8
QMAKE_CXX_FLAGS += /utf-8

3.3 处理含有中文的通信数据

在数据通信过程中,如果通信协议中含有中文,而通信双方对文本编码没有明确约定,则很可能出现乱码问题。 解决方案是使用通信双方在通信协议中预先约定的统一文本编码。 一般情况下可以使用UTF-8编码。

4. 总结

请记住:每当我们将数据处理为文本时,我们都需要考虑数据格式和文本编码。 切勿在不忽略文本编码的情况下直接进行文本处理。

除了Qt开发之外,在其他软件开发技术中也需要关注文本编码问题。

本文主要讲解文本编码的相关处理经验和整体逻辑框架。 文本编码相关的内容比较多,项目中可能会出现各种各样的问题。 有必要结合本文阐述的总体思路,对问题进行深入综合分析。

好了,今天的主题就讲到这里吧,不管如何,能帮到你我就很开心了,如果您觉得这篇文章写得不错,欢迎点赞和分享给身边的朋友。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注