第四篇 爬蟲去重策略,以及編碼問題
阿新 • • 發佈:2017-10-03
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 can‘t 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.
第四篇 爬蟲去重策略,以及編碼問題