好像寫Python的人常常遇到這個問題,若是是一個新手,對網上的解答簡直頭都大了.若是又是Python2.x,簡直了都(歷史緣由,不贅述)
可是,字符串編碼是常常要面對的問題,不可不察.網絡
Unicode與各類編碼格式工具
個人理解是:Unicode是一種規則
,法則
,抽象的
,飄在空中的
; 而各類編碼則是工具
,把Unicode字符搗鼓成咱們想要的東西
. 在Python中,Unicode充當着解決各類字符編碼問題的橋樑
編碼
數據(字符串)與Python程序無非兩種關係: 數據流到Python程序中(輸入),Python程序流出各類數據(輸出).
code
數據從外部(文件,網絡等地方)-->Python程序時utf-8
先不急,用一個unicode接住它們,而後再進行以後的各類操做ci
content = unicode(originalContent, 'src_data_encoding') #此處必需要知道源的編碼格式
數據從Python-->外部時unicode
Unicode字符是不能隨便寫的,要先把咱們的Unicode編碼成具體編碼格式,而後再寫出字符串
content = unicodeContent.encode(encoding) #必需要清楚目的地能接受的編碼格式
其餘須要知道的cmd
1 Python有時會「自做主張地」轉換咱們的unicode(以ascii格式),簡直stupid
,ascii就那麼幾個字符,確定常常拋UnicodeEncodeError啊
2 Python有時能猜到目的地
的編碼,猜到萬幸,沒有猜到就拋錯誤
3 使用Windows_中文版的人須要知道它的cmd控制檯是gbk編碼的
4 Linux等就好多了,我老是「若是不清楚該使用什麼編碼,那就是utf-8了」
5 文件頭加一個coding=utf-8
什麼的/或者經過sys模塊
6 always be utf-8-no-bom
老是好的,全部IDE/editor都默認編碼爲utf-8-no-bom
,能夠省去許多麻煩(其中Windows的記事本少用,一不當心就忘記了記事本會插入BOM
這一事實)
7 若是能用Python3就毫不使用Python2,3修補了字符串的許多坑(不僅是unicode這一項)it
舉例
1 Windows_cmd控制檯打印unicode
Windows8中文版-Python2.7 s = u'中國人民' print s #ok,看來Python知道應該使用什麼編碼,隱式轉換了 print s.encode('gbk') #ok,目的地能接受gbk print s.encode('utf-8') #fail,看來萬能的utf-8很差用啦,由於目的地不接受
2 有時候從網頁獲取來的數據多是utf-8的,可是打印到Windows_cmd控制檯出錯了
content = unicode(contentFromHtml, 'utf-8') #固然也有多是其餘編碼 print content.encode('gbk') #轉換層控制檯能接受的編碼
總結
unicode是一座橋樑
,鏈接這橋這頭與那頭