python做爲最優雅的語言之一一直倍受你們的青睞。它能夠幫你從單調重複的工做解脫出來,好比統計各類蛋疼的數據,導入導出boss須要的表格等等。你要作的是編寫、運行python腳本,而後喝個茶水等着運行結果就行了。html
這篇文章就是這樣產生的----在我使用scrapy爬取數據的時候,遇到了python 2.x 中文字符編碼的問題,之前對這個問題也是隻知其一;不知其二,此次再次遇到說明要還債了,去搞清楚字符編碼究竟是怎麼一回事。python
首先,咱們須要明確在計算機中全部信息最終都是使用二進制表示的,每一個二進制位(bit)有0和1兩種狀態,8個二進制位被稱爲一個字節(byte),能夠表示256種狀態。數據庫
做爲計算機領域的先驅,美國在上世紀60年代制定了一套字符編碼,使用二進制來表示英文字母、數字及一些符號,這套字符編碼就是ASCIIjson
隨着計算機的發展,很快有了其餘語言的編碼需求,單字節的ASCII編碼因爲能表示的字符有限,已經不能知足需求了。爲了避免與ASCII編碼衝突,有能力的國家開始設計單獨的編碼----使用更多的字節表示字符,中國製定了gb2312數組
可是,隨之而來的是字符編碼方案數量增長帶來的一系列問題。所以,Unicode應運而生。它把全部語言的字符都用同一種字符集來表示,解決了因不一樣字符編碼方案帶來的一系列問題bash
先給你們來一個簡單的🌰,比較常見scrapy
文件test.py內容:ui
#!/usr/bin/python
city = '京'
print city
複製代碼
運行python test.py,結果如圖:編碼
那爲何那? 若是你不知道,說明你沒有仔細看預備知識。這是由於.py文件默認採用的是ASCII編碼,中文字符不在它表示的範圍內,報錯經過修改test.py默認編碼方式解決spa
#!/usr/bin/python
# -*- coding: utf-8 -*-
city = '京'
print city
複製代碼
看過了🌰,再來看看str和unicode
str和unicode都是basestring的子類。可是,嚴格來講unicode是真正意義上的字符串,str是字節碼----由unicode通過編碼後的字節組成的序列。 上個截圖,消除你們的疑惑,s == s2
經過這個🌰,理解str和unicode的區別,媽媽不再擔憂處理中文字符時出現亂碼或報錯了(不管是unicode轉str,仍是str轉unicode),還要避免以下操做
說了這麼多,show me you code (斜眼笑)🌰:
#!/usr/bin/python
# -*- coding: utf-8 -*-
u_z = u'京'
s_z = '京'
u=u'jing'
s='jing'
print u_z
print s_z
print repr(u_z)
print repr(s_z)
print '=================='
print u
print s
print repr(u)
print repr(s)
print '=================='
print u.decode()
print s.encode()
print u_z.decode()
print s_z.encode()
複製代碼
#!/usr/bin/python
# -*- coding:utf8 -*-
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
複製代碼
好了,這就是我對python2.x 中文字符編碼的一些理解,但願能夠幫到你
未經本人容許,不得轉載。文章有疏漏淺薄之處,請各位大神斧正