OpenERP - UnicodeDecodeError:'ascii'编解码器无法解码字节?

时间:2014-03-06 13:32:02

标签: python encoding ascii openerp decoding

当我尝试选择一个字段时,我开始收到此错误。这很奇怪,因为它不会为该类中的任何其他字段提供此错误。我不明白为什么它甚至在这里使用'ascii'编解码器,而对于其他人则不然。如果我将标签更改为仅包含ascii符号,则错误消失,但这不是解决方案。

我的字段描述如下:

    'partner_p_id':fields.many2one('res.partner','PASPĮ', domain=[('is_paspi','=',True)], track_visibility='onchange'),

_track中跟踪:

_track = {
  'partner_p_id':{},
}

文件中使用的编码:

# -*- encoding: utf-8 -*-

确切的错误如下所示:

File "/openerp/server/openerp/addons/mail/mail_thread.py", line 366, in format_message
    message += '%s</div>' % change.get('new_value')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 34: ordinal not in range(128)
2014-03-06 13:21:14,042 13455 ERROR amb_test openerp.netsvc: ascii
<div> &nbsp; &nbsp; &bull; <b>PASPĮ</b>: 
34
35
ordinal not in range(128)

正如我所说,我的其他字段被跟踪相同,并且有些字符在标签中也有非ascii符号,但它不会为任何其他字段提供此类错误。

1 个答案:

答案 0 :(得分:0)

你正在混合字符串和unicodes。鉴于错误消息,我猜这就是发生的事情:

>>> message = u''
>>> message += '%s</div>' % ('<div> &nbsp; &nbsp; &bull; <b>PASPĮ</b>:')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 34: ordinal not in range(128)

您可以通过确保在change.get('new_value')调用中返回一个unicode字符串来处理它。您可以这样做(注意括号中字符串前面的u符号):

message += '%s</div>' % (u'<div> &nbsp; &nbsp; &bull; <b>PASPĮ</b>:')

或者这(注意.decode('utf-8')

message += '%s</div>' % ('<div> &nbsp; &nbsp; &bull; <b>PASPĮ</b>:'.decode('utf-8'))
相关问题