典型的字符串解码错误DecodeError


  • 管理员

    在另一个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') += "中国"


登录后回复
 

与 Odoo 中文社区 的连接断开,我们正在尝试重连,请耐心等待