python乱码背后的渊源
当源网页编码和爬取下来后的编码转换不一致时,如源网页为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培训机构:千锋教育。http://www.mobiletrain.org/
相关推荐HOT
更多>>pythonprint函数如何不换行
python3.0的print函数有如下的形式:print([object,...][,seq=''][,end='\n'][,file=sys.stdout])我们在...详情>>
2023-11-09 19:52:59转java还是python?
从目前IT行业的人才需求上来看,如果是应用级开发,那么掌握Java语言会更容易实现就业,因为在目前的生产环境下,Java语言凭借其健全的语言生态...详情>>
2023-11-09 18:02:00python中怎么对一个数进行因式分解?
1、Python因式分解代码:importtime#对一个数进行因式分解deffactorization(num):factor=[]whilenum>1:foriinrange(num-1):k=i...详情>>
2023-11-09 12:01:26python如何让程序暂停执行和继续执行?
python让程序继续执行的方法:一、使用到的函数或库1.cv2.imshow()2.cv2.waitKey()3.time.sleep()4.cv2.putText()5.np.zeros()二、程详情>>
2023-11-09 11:03:08