典型的字符串解码错误DecodeError
已解决
Odoo 开发与实施交流
-
在另一个Odoo论坛看到这样一个问题。这是一个很典型的python解码错误,把我在那边的回答转到这里,希望对大家有帮助:
定义一个notes=fields.Html()
然后在赋值的时候,self.notes="你好!" 这样没有问题,一起正常;
但是如果这样赋值了以后,在对其进行运算,比如再追加其他字符
self.notes+=“中国",或者self.notes.join('中国'),此时就会报错:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 0: ordinal not in range(128); 请问什么问题?这是典型字符串解码错误。
原因是系统保存的值,即self.notes的值是Unicode, 当使用字符串操作符
+
或字符串函数.join
去链接字符串和Unicode时,字符串会被“隐性”转换为Unicode。隐性转换中使用了python2.x的默认字符串编码-ASCII
,对中文字符串用ASCII解码就会报上面的解码错误。把“中国”也变成Unicode就没问题了,注意双引号前的那个u,比如:
self.notes += u"中国"
或者,反过来将self.notes的内容转换为字符串(Odoo中一般用utf-8编码)
self.notes.encode('utf8') += "中国"