千锋教育-做有情怀、有良心、有品质的职业教育机构

python乱码背后的渊源

来源:千锋教育
发布时间:2023-11-06 07:58:57
分享

当源网页编码和爬取下来后的编码转换不一致时,如源网页为gbk编码的字节流,而我们抓取下后程序直接使用utf-8进行编码并输出到存储文件中,这必然会引起乱码,即当源网页编码和抓取下来后程序直接使用处理编码一致时,则不会出现乱码,此时再进行统一的字符编码也就不会出现乱码了。最终爬取的所有网页无论何种编码格式,都转化为utf-8格式进行存储。

注意:区分源网编码A-gbk、程序直接使用的编码B-ISO-8859-1、统一转换字符的编码C-utf-8。

在此,我们拓展讲讲unicode、ISO-8859-1、gbk2312、gbk、utf-8等之间的区别联系,大概如下:

最早的编码是iso8859-1,和ascii编码相似。但为了方便表示各种各样的语言,逐渐出现了很多标准编码。iso8859-1属于单字节编码,最多能表示的字符范围是0-255,应用于英文系列。很明显,iso8859-1编码表示的字符范围很窄,无法表示中文字符。

1981年中国人民通过对ASCII编码的中文扩充改造,产生了GB2312编码,可以表示6000多个常用汉字。但汉字实在是太多了,包括繁体和各种字符,于是产生了GBK编码,它包括了GB2312中的编码,同时扩充了很多。中国又是个多民族国家,各个民族几乎都有自己独立的语言系统,为了表示那些字符,继续把GBK编码扩充为GB18030编码。每个国家都像中国一样,把自己的语言编码,于是出现了各种各样的编码,如果你不安装相应的编码,就无法解释相应编码想表达的内容。终于,有个叫ISO的组织看不下去了。他们一起创造了一种编码UNICODE,这种编码非常大,大到可以容纳世界上任何一个文字和标志。所以只要电脑上有UNICODE这种编码系统,无论是全球哪种文字,只需要保存文件的时候,保存成UNICODE编码就可以被其他电脑正常解释。UNICODE在网络传输中,出现了两个标准UTF-8和UTF-16,分别每次传输8个位和16个位。于是就会有人产生疑问,UTF-8既然能保存那么多文字、符号,为什么国内还有这么多使用GBK等编码的人?因为UTF-8等编码体积比较大,占电脑空间比较多,如果面向的使用人群绝大部分都是中国人,用GBK等编码也可以。

也可以这样来理解:字符串是由字符构成,字符在计算机硬件中通过二进制形式存储,这种二进制形式就是编码。如果直接使用“字符串??字符??二进制表示(编码)”,会增加不同类型编码之间转换的复杂性。所以引入了一个抽象层,“字符串??字符??与存储无关的表示??二进制表示(编码)”,这样,可以用一种与存储无关的形式表示字符,不同的编码之间转换时可以先转换到这个抽象层,然后再转换为其他编码形式。在这里,unicode就是“与存储无关的表示”,utf—8就是“二进制表示”。

以上内容为大家介绍了python乱码背后的渊源,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注IT培训机构:千锋教育。https://www.mobiletrain.org/

声明:本站部分稿件版权来源于网络,如有侵犯版权,请及时联系我们。

相关推荐

  • 关于Python 的 Web 自动化测试的实践 Web测试是软件测试中比较的一个分支,而要实现Web自动化测试则要求测试人员能熟练掌握自动化测试工具和编程语言。介绍免费开源的Web测试工具Selenium,以及流行的编程语言Python。根据自动化
  • Python构造函数该怎么写? 在java中构造函数是与类同名的,而且会伴随着实例化的动作而执行。在python中呢?python中的构造函数叫做init方法,全名是__init__具体看下面代码classPerson():__ge
  • Python继承性和 java 是一样的吗? 聊完了多态,再来看看面向对象的另一个特征:继承性。什么是继承?继承就是定义好了一个类A(父类);再定义一个新类B(子类),类B拥有类A的方法和属性,并且又定义了新的属性和方法。类A称为父类,类B称为子
  • 如何在 python 中打开文件? 使用内置函数open就可以打开文件。先来看下python中对open函数的定义fileobject=open(file_name[,access_mode][,buffering])参数定义如下acc
  • Python中JSON 对象有哪些特点? JSON对象的结构是什么样子呢?上面代码中的obj就是一个JSON对象,我们来观察下它。它是用{}括起来的一个集合,每一项都包含名称和值,如name就是名称,而值就是xxx。名称可以是任意字符串,但必
  • Python中常用的 json 操作有哪些? 刚开始接触json的操作,我主要有下面几个疑问:json操作需要什么库?如何将python对象转换成JSON字符串,更进一步,能不能直接转换成文件句柄存储到文件中?(编码)如何将json字符串转换成p