Python2.x的編碼問題

好像寫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是一座橋樑,鏈接這橋這頭與那頭

相關文章
相關標籤/搜索