我从数据库中检索了big5中编码的数据,我想将数据作为html内容的电子邮件发送,代码如下:
html += """<tr><td>"""
html += unicode(rs[0], 'big5') # rs[0] is data encoded in big5
我运行脚本,但是引发了错误:UnicodeDecodeError:'ascii'编解码器无法解码字节......但是,我在交互式python命令行中尝试了代码,没有引发错误,你能不能给我一些线索?
答案 0 :(得分:2)
如果html
不是unicode对象而是普通字符串,则当它与转换后的rs[0]
版本连接时,会转换为unicode。如果html
现在包含特殊字符,则可能会出现unicode错误。
因此html
的其他内容也需要正确解码为unicode。如果特殊字符来自字符串文字,则可以使用unicode文字(例如u"abcä"
)。
答案 1 :(得分:1)
您对unicode()
的来电正常。它是串联,它将一个unicode对象添加到字节字符串中,这会导致麻烦。如果您将第一行更改为u'''<tr><td>'''
,(或u'<tr><td>'
),它应该可以正常工作。
编辑:这意味着您的错误在于python到达此片段时已经在html
中的数据:
>>> '\x9f<tr><td>' + unicode('\xc3\x60', 'big5')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0x9f in position 0: ordinal not in range(128)
>>> u'\x9f<tr><td>' + unicode('\xc3\x60', 'big5')
u'\x9f<tr><td>\u56a5'
>>>