跳转至内容
  • 典型的字符串解码错误DecodeError

    已解决 Odoo 开发与实施交流 decodeerror
    1
    0 赞同
    1 帖子
    2k 浏览
    D
    在另一个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') += "中国"