关于python编码的困惑

时间:2010-05-25 11:15:00

标签: python unicode encoding ascii

我从数据库中检索了big5中编码的数据,我想将数据作为html内容的电子邮件发送,代码如下:

html += """<tr><td>"""        
html += unicode(rs[0], 'big5') # rs[0] is data encoded in big5

我运行脚本,但是引发了错误:UnicodeDecodeError:'ascii'编解码器无法解码字节......但是,我在交互式python命令行中尝试了代码,没有引发错误,你能不能给我一些线索?

2 个答案:

答案 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'
>>> 
相关问题