[Python]-字串編碼錯誤UnicodeDecodeError

摘要:[Python]-字串編碼錯誤UnicodeDecodeError

在本機上的測試環境都沒問題,但是上傳到 AppEngine 後,頁面a上的某個textField如果輸入了中文字,透過 post 的方式做字串傳遞到頁面b做驗證時,經常會出現 UnicodeDecodeError 的 exception

sol: 轉自

http://webcache.googleusercontent.com/search?q=cache:VRxRpdi2oXgJ:atmospccu.twbbs.org/blogs/%3Fp%3D356+python+unicodedecodeerror&cd=9&hl=zh-TW&ct=clnk&gl=tw

python裡面,字串有兩種,一是普通的字串(str),另一種叫做unicode;分兩種的主要目的是為了解決程式「內部」編碼問題,只要把程式裡的字串都編成unicode,在輸出的時候就可以轉成任意編碼輸出;例如把字串編成unicode:
u = u"字串"
u = stringVar.decode('big5')
u = unicode(stringVar,'big5')

上面兩個方法都會產生unicode變數u。要輸出其他編碼,可以用encode屬性。

不過在台灣日文漢字及惡名昭彰的「unicode補完計畫」泛濫下,decode時會遇到UnicodeDecodeError的錯誤(因為有些字的編碼不在標準big5裡)讓程式停下來,這時可以用個參數避開這個問題:
u = stringVar.decode('big5','replace')
u = unicode(stringVar,'big5','replace')

這是把預設(’strict’)遇到錯誤時raise UnicodeDecodeError,改成把錯誤的字元標成方格(應該是),這樣就可以讓程式順利地(?)繼續執行下去。選項除了’replace’外,還可以用’ignore’忽略這個字元。

最近在寫一個抓某討論板討論主題的程式,剛好遇到這個問題,就筆記一下。