当前位置: 首页 > news >正文

电商直播app开发公司seo研究中心论坛

电商直播app开发公司,seo研究中心论坛,济南简单网站制作排名公司,网页制作素材免费网站在项目开发中,经常会遇到文本编码问题。文本编码知识非常基础,但对于新手来说,可能需要花费较长的时间去尝试,才能在脑海中建立对编码的正确认知。文本编码原理并不难,难的是在项目实践中掌握正确处理文本编码的方法。…

在项目开发中,经常会遇到文本编码问题。文本编码知识非常基础,但对于新手来说,可能需要花费较长的时间去尝试,才能在脑海中建立对编码的正确认知。文本编码原理并不难,难的是在项目实践中掌握正确处理文本编码的方法。本文从项目实践出发,总结了项目中编码处理的相关经验,希望可以帮助基础比较薄弱的同学,快速建立对编码的基本认知,同时减少实际项目中踩坑的几率。

1. 从不同的视角看数据

1.1 计算机最底层视角

从计算机最底层的视角看,计算机中的数据,不管是寄存器中的数据,还是内存中的数据,还是磁盘上的文件数据,都是以0和1的二进制格式存放的。所以,一般在说二进制数据时候,是从计算机最底层的视角而言的。

1.2 计算机应用视角

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

文件创建者通常使用文件后缀名来标明文件内容格式。常见的文件格式后缀名有:.jpg、.txt、.mp4 等。

处理数据时,是否遵循数据格式约定,完全由应用程序决定,程序认为它是什么格式,就可以以什么格式对数据进行处理。如果使用和约定不一致的格式处理数据,那么从数据中提取出的信息极有可能是混乱的、无用的。例如,使用文本编辑器打开一张图像,最终文本编辑器的显示内容将是一堆乱码,无法阅读。实际项目中文本出现乱码问题也是这个原因。

2. 文本乱码问题分析

2.1 文本编码简介

对世界上所有符号、文字进行编号,产生一张字符表,这个表叫做“字符集”。这样一来,我们可以使用数字编号来表示字符,每个编号占用相同的字节数。因为世界上的字符很多,一般使用32位的无符号整型存储编号,总计大约可以表示42亿种字符。目前通用的字符集是Unicode字符集。

字符集中,有的字符使用频繁,有的字符使用不频繁,使用相同字节长度的数字编号会有些浪费存储空间。改进的存储方案类似于哈夫曼编码:将使用频繁的字符用更少的字节数表示,使用不频繁的字符,用较长的字节数表示。经过优化的存储方式,叫做“文本编码”。

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

2.1 文本乱码原因

由于计算机最早由老外发明,所以各种文本编码格式对英文的兼容性最好,所以英文通常不会乱码。而同一个中文汉字,用不同的文本编码格式进行编码后,对应的二进制数据是不同的。反过来,同一段文本数据,使用不同的编码进行文本解码,则会解析出来截然不同的文本内容。

总的来说,文本乱码有两个原因:

  • 一段数据本身就不是文本数据,可能是图像数据,也可能是视频数据等非文本类型的数据,如果将其视作文本进行解码,必然会导致乱码。
  • 我们编写的应用程序,没有采用正确的文本编码格式对文本数据进行解码,导致输出的文本就会出现严重混乱,即乱码,进而导致程序处理结果偏离预期,出现错误。

2.2 文本乱码的处理思路

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

  • 检查文本数据的产生、存储、传输过程是否出错;
  • 尝试与文本内容提供者核对双方文本编码格式是否一致。
  • 尝试猜测文本编码,这种方法不是很可靠,但值得一试。

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

Qt提供了很多关于文本编码解码的函数及类接口。如下所示:

接口说明
QString::fromXXX()系列QString的静态函数如QString::fromLocal8Bit,QString::fromUtf8,QString::fromLatin1等,提供了常用的文本解码接口。解码出来的结果统一为UTF-16编码格式,保存在QString缓冲区中。
QString::toXXX()系列QString的静态函数如QString::toLocal8Bit,QString::toUtf8,QString::toLatin1等,提供了常用的文本编码接口。编码后的文本数据,保存在QByteArray缓冲区中。
QTextCodec类提供了更强大的编码转换功能,可以通过文本编码名称获取对应的文本编解码器。可以实现各种文本编码之间的编码转换。

这里必须提一下QByteArray和QString的区别。

类型区别
QByteArrayQByteArray中的数据,仅仅是二进制数据,可以把它看作是一个内存区,仅此而已。它用于计算机底层视角下的数据存储。可以根据业务需要,确定数据格式类型后,再进行数据处理。
QString存储文本。它用于计算机应用视角下的文本内容存储。QString可直接在界面内容显示、文本信息处理等应用层面使用。

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

3. 容易出现文本乱码的应用场景

3.1 处理含有中文的文件

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

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

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

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

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

在进行数据通信的时候,如果通信协议中包含中文,而通信双方又没有对文本编码做出明确约定,那么很有可能会出现乱码的问题。解决办法是,通信双方通信协议中提前约定好的统一的文本编码,一般可以使用UTF-8编码。

4. 总结

牢记:只要我们按文本处理数据,就要考虑数据格式和文本编码。绝不可忽略文本编码直接进行文本处理。

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

本文主要讲解了文本编码的相关处理经验和总体逻辑框架。文本编码相关内容很多,项目中可能会出现各种各样的问题,需要结合本文讲解的总体思路,深入问题综合分析。


本文原创发布于 Qt未来工程师。

http://www.hrbkazy.com/news/8190.html

相关文章:

  • 中国建设银行网站宁波互联网营销模式有哪些
  • 有什么好的网站做推广的长春网站建设技术支持
  • wordpress如何导出数据广西seo
  • 做科技公司的网站公司情感营销案例
  • wordpress怎么加动态背景图图片深圳谷歌seo推广
  • 重庆公司专业建站百度权重等级
  • 泰州做网站的企业搜索引擎优化
  • php网站模板怎么修改百度app关键词优化
  • 专业的网站建设多少钱军事新闻最新24小时
  • 国际网站建设与维护app推广接单渠道
  • 织梦网站栏目不能更新学技术的培训学校
  • 海兴网站建设广告引流推广平台
  • 需要郑州网站建设深圳百度关键字优化
  • 怎么创建图片网站什么是白帽seo
  • 网页设计与网站开发论文一份完整的品牌策划方案
  • 网站建设公司盈利模式软件开发外包平台
  • 哪些网站可以做产品推广网站域名解析ip查询
  • 移动微网站开发线上推广渠道有哪些方式
  • 晋江做任务的网站青岛谷歌优化
  • 北京建站的网站点击量统计
  • 一个专做里番的网站深圳外贸seo
  • 蜘蛛云建站网站海豹直播nba
  • 网站建设页面带声音西安网络推广外包公司
  • 高端的家居行业网站开发包头整站优化
  • 影视广告设计与制作广州seo工资
  • 网站推广怎么做北京网站优化seo
  • 武汉找工作福州seo技巧培训
  • 台州网站建设抖音关键词优化排名
  • 潍坊网站建设wf3求老哥给几个靠谱的网站
  • 百度门户网站网站分析培训班