爬虫学习笔记(3)爬虫中常见的字符串编码问题

先来说一说编码问题的历史(不感兴趣的童鞋可以直接跳过,直接看重点部分)
由于计算机是美国人发明的,所以一开始的编码格式采用美国人制定的ASCII码,用一个字节(Byte)存储常用的英文字母和字符,前期用了128个字符,后来加入了一些欧洲国家的符号,使用的就是128-255这一段的字符,所以这时使用了256个字符。

再到后来随着计算机的普及,越来越多的国家在使用的过程中发现现有的这一套编码系统不能满足自己的需求,就开发出了一套自己的编码系统,较为常见的有中国的GB2312编码格式。注:GB2312是简体中文的编码格式,经过扩展后变成了可以显示繁体中文的GBK编码格式。

但是这就出现了一个问题,不同的编码格式下传输信息就会出现显示的乱码问题,而且数据的传输也极为不方便。

当然,这样的小问题是难不倒聪明的人类的

于是伟大的unicode编码就出现了,它将世界上所有的编码格式统一,它用两个字节表示一个字符。也就是说将原有的一个字节表示的字符(如英文字母,英文字符等)进行扩展,将高位补零,统一采用两个字节进行表示。然后对世界上所有的语言符号进行统一的编码。这样就可以表示2的16次方个不同的字符,也就是65535个字符。

但是。。。。

又有问题出现了。。。
比如在传输一篇全英文的文件时,由于unicode会将高位全部补0,将一个字节变成两个字节,这就会产生比原来大一倍的数据量,如果传输的数据量本身就很大,那这简直就是一场灾难。

当然聪明的人类又想到了解决办法

在进行数据传输的时候,将原来定长的unicode编码变成变长的utf8编码。
重要的utf8编码:它可以使用1-4个字节表示一个符号,根据不同的符号可以变换字节的长度。
具体的编码规则这里就不赘述了,有兴趣的童鞋可以去查查相关资料。

所以下面将是本文的重点

在python程序的运行过程中,如果遇到编码不一致的问题,就需要进行转码。就好像两个不同语言的人想要交流,就得带一个翻译一样。

在平常写程序的时候,通常会遇到三个方面的编码问题:

  1. 程序文件本身的编码问题(也就是py文件)
  2. pyhon运行环境的编码问题,比如系统,数据库,编译软件自身等。
  3. 读取的外部文件的编码问题

在python2中这些问题真的很繁琐,需要decode(“原编码格式”),将原编码格式转化成unicode编码,然后encode,将unicode编码转化成utf8编码。注:s.encode(‘utf-8’),这里的s必须是unicode编码格式。
在python3中,已经将所有的字符串统一按照unicode编码格式,所以可以很轻松的用encode()方法转化成utf-8,然后进行数据的传输。

猜你喜欢

转载自blog.csdn.net/qq_30003623/article/details/83714107