1. 程式人生 > >第四篇 爬蟲去重策略,以及編碼問題

第四篇 爬蟲去重策略,以及編碼問題

english sci 不同 方法 查看 traceback 爬蟲 ascii error:

  技術分享

unicode和utf-8編碼

技術分享

技術分享

技術分享

PS:數據在內存裏,使用unicode編碼會方便很多,因為這樣占用的bit是統一的,而utf8對於不同的語言占用的bit不同的,但存儲文件使用utf8編碼會減少很多空間,所以需要靈活轉換。

下面是py2中的例子,python存儲在內存裏的數據是自動轉化成unicode編碼的,通過sys庫的getdefaultencoding方法可以查看python2解釋器的默認編碼是:ascii碼,

變量s是英文,直接編碼成utf8沒問題,但變量su是中文,直接編碼成utf8會報錯,因為執行encode的時候,實際上會先調用decode,而傳參是python的默認編碼(ascii)。

註意一點:我這裏是在unbuntu操作的,linux終端的默認編碼是utf8,變量su是經過了linux的一層轉換,所以使用decode時傳參是utf8,在windows裏,默認編碼是gb2312

再註意一點:decode方法的作用是把別的編碼格式的數據解碼成unicode,encode方法是把數據 編碼 成指定編碼格式的數據。

>>> s = "English"
>>> su = "中文"
>>> import sys

>>> sys.getdefaultencoding()
ascii
>>> s.encode("
utf8") English >>> su.encode("utf8") Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeDecodeError: ascii codec cant decode byte 0xe4 in position 0: ordinal not in range(128) >>> su1 = su.decode("utf8") >>> su1 u\u4e2d\u6587 >>> su1.encode("
utf8") \xe4\xb8\xad\xe6\x96\x87 >>> su \xe4\xb8\xad\xe6\x96\x87 >>> suu2 = u"中文" >>> suu2 u\u4e2d\u6587 >>> suu2.encode("utf8") \xe4\xb8\xad\xe6\x96\x87 >>>

在py3,python解釋器的默認編碼統一成unicode.

第四篇 爬蟲去重策略,以及編碼問題