在解決錯誤以前,首先要了解unicode和utf-8的區別。
unicode指的是萬國碼,是一種「字碼表」。而utf-8是這種字碼表儲存的編碼方法。unicode不必定要由utf-8這種方式編成bytecode儲存,也能夠使用utf-16,utf-7等其餘方式。目前大多都以utf-8的方式來變成bytecode。python
其次,Python中字符串類型分爲byte string 和 unicode string兩種。
若是在python文件中指定編碼方式爲utf-8(#coding=utf-8),那麼全部帶中文的字符串都會被認爲是utf-8編碼的byte string(例如:mystr="你好"),可是在函數中所產生的字符串則被認爲是unicode string。
問題就出在這邊,unicode string 和 byte string 是不能夠混合使用的,一旦混合使用了,就會產生這樣的錯誤。例如:
self.response.out.write("你好"+self.request.get("argu"))
其中,"你好"被認爲是byte string,而self.request.get("argu")的返回值被認爲是unicode string。因爲預設的解碼器是ascii,因此就不能識別中文byte string。而後就報錯了。函數
如下有兩個解決方法:
1.將字符串全都轉成byte string。
self.response.out.write("你好"+self.request.get("argu").encode("utf-8"))
2.將字符串全都轉成unicode string。
self.response.out.write(u"你好"+self.request.get("argu"))
byte string轉換成unicode string能夠這樣轉unicode(unicodestring, "utf-8")post