在刚开始接触Python爬虫的时候,经常面对的一个问题就是,尽管直接查看网页源码,是中文,但是通过Python爬虫,爬取后,IDE如Pycharm的终端,就是乱码。为了查找问题的来源,最先找到的是阮一峰关于字符编码的讲解。
就简单来讲,ASCII码设计之初,就只想到在美国的小范围圈子用,根本没有想到过能走向世界。就和ipv4的设计一样,总是感觉,这样差不多就够用了。ASCII码设计出来,就是给用英文的美国人用的,用为一个字节,表示编程常用到的数字啊,大小写的英文字母等。
谁能想到计算机能发展到引起第三次工业革命。能让世界各国的人都能用到。但是既然走出了国门,就不能只展示英文了。就需要展示各种语言,不同的语言就需要不同的字符来表示。当初26个英文字母大小写,在加上些数字以及符号,用128个就够了。但是,如果推向世界,拿中文来说,中文每个汉字就需要每个不同的符号来表示。所以这时候就需要把范围扩大,扩大后就是Unicode,就像它的英文名,表示能表示所有字符。
Unicode是好,但是占用的内存也大。原来用四分之一存储空间的ASCII码就能表示英文,但是用Unicode表示也是英文,但是内存却涨了一倍。所以需要优化。这就又有了utf-8。
utf-8的特点是,可以根据需要,该用多少就用多少,能有效减少内存的占用。
gbk是中文专属的编码。
然后说回到Python,可以把不同的编码理解成为不同国家的货币。在Python中不同的货币的兑换方式是通过decode和encode两种方式。现在国际上通用的是通过美元来做国际间的流通。在Python中,可以把Unicode看做是美元。你现在是一个英国人了,你想要到中国去旅游,这时候你的兑换方式是,先将英镑兑换为美元,然后将美元兑换成人民币。到了Python中常见的方式是这样,如果内容是utf-8格式,这样打印出来是乱码,这时候就需要通过decode解码为Unicode,然后再通过encode的方式编码为gbk,才能显示为中文。
然后在说几个Python中几个常见的查看格式的命令:
比如 print type()
还有就是参考的这篇文章:常用的Python查看格式方法

可能你的终端输出的是下面这样,当然也可能不是:

cp936实际上就是一种gbk编码方式
知道了系统的默认编码方式是ASCII,如何更改,那就要用到下面这个命令

到最后还一个经常出现的疑难杂症,这个是困扰了我有一段时间:
有一种情况是,如果内容本身就是Unicode怎么办,就是类似这种
a="\\u8fdd\\u6cd5\\u8fdd\\u89c4"
print a
我曾经用过replace方法去掉一个\(也是难为我了)
这种的处理方法是

而我当时的问题是,内容本身是utf-8的,类似这种
a='\\xe5\\x85\\xb3\\xe4\\xba\\x8e\\xe4'
同理,但是这时候不能用(‘utf-8-escape’)了,通过查询这篇文章,我知道了要用(‘string-escape’)。
好,成功!
网友评论