遇到过多次编码错误,最常遇到的就是下面这个:
“UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe4 in position 0: ordinal not in range(128)“
首先了解unicode和utf-8
unicode指的是万国码 是一种”字码表” 而utf-8是这种字码表储存的编码方法,编成bytecode储存,unicode还可以编码utf-16,utf-7等其他方式
Python中字符串类型分为两种型态:byte string、unicode string
设定了“ #coding=utf-8”后所有带有中文的都会被宣告为utf-8的byte string,但是,在函数中所产生的字符串,又会是unicode string
其实两者都能表示中文,但是不代表能够混用,混用就会出错
例如:
response.out.write("你好"+request.get("argu"))
中文字符“你好”会被宣告为byte string,而request.get()的结果是unicode string
Python会自动常识把前面的“你好”转为unicode
但是预设的解码器是ascii,所以转换不出来,就报了上面的错误
UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe4 in position 0: ordinal not in range(128)
一劳永逸的解决方法
综上所述,所以解决方法有3种
全部转为byte string (response.out.write(