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

0 投票
1 回答
1648 浏览
提问于 2025-04-17 21:07

我在尝试选择一个字段时开始遇到这个错误。很奇怪,因为这个类里的其他字段都没有出现这个错误。我不明白为什么这里会用到“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

你在混用字符串和Unicode字符。根据错误信息,我猜是这个原因导致的:

>>> 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'))

撰写回答