我就想不通為什麼windows的字符終端用的是cp936而不是utf-8。不過要是他用的是utf-8,那我也沒什麼博文好寫了==於是本菜鳥總結了一下,和廣大python菜鳥分享。

當然如果你全部只用英文或數字,那我又沒什麼博文好寫了wwww

當你的腳本在字符終端出現亂碼或錯誤時,按以下辦法自檢:

  1. 打印的字符是中文字,但是都是沒學過o(╯□╰)o:使用了utf-8編碼(encode),字符終端代碼頁是gbk
  2. 打印出的都是「�åȡ��」:你使用了gbk或其他的編碼,而終端使用的是utf-8

一般來說:

  1. 網頁使用utf-8編碼較多(聽說以前百度是用的gb2312?),做爬蟲並要打印在屏幕上時,要對原始數據做utf-8解碼(decode)處理
  2. windows下的大部分文本文件是ANSI編碼,讀取文件並打屏幕上時做cp936解碼

我一般是這麼解決的:

  •  【必須】在腳本開頭加入以下代碼,為使內部編解碼的「中間過程」不使用ascii 解碼器。防止出現’ ‘ascii’ codec can’t decode/encode byte 0x99 in position 4-6』

  • 寫一個「規範化字符串」用的函數,這樣得到的字符串可直接用於打印,且因為有errors處理,不會出現『『gbk』 codec cannot decode/encode byte 0x99 in position xxx』的錯誤(第二個參數指定error處理,可選有’ignore’丟棄, ‘replace’用?代替)

  • 在腳本開頭加入編碼定義語句。當然你不怕死也可以用gbk

這樣之後,在代碼中如果出現

之類的語句時,需要在字符串後面加上.decode(‘utf-8’)變成

因為你的代碼是utf-8編碼的

  • 如果你和我一樣用的是pydev+eclipse寫的代碼,為了方便windows環境調試起見,可以把控制台的編碼改成和windows一樣挫的gbk。方法是:Run->Run configuration->Common->Encoding->Others填入GBK或者cp936

寫完了~真開森~

參考資料:

http://hi.baidu.com/mdj_hu/item/4d7d0803d38e62e1fe240de4

http://www.jb51.net/article/26543.htm(不推薦,看完暈過去)