2010-05-25 69 views
1

我取回从数据库中文编码的数据,我想将数据发送为HTML内容的电子邮件时,代码是这样的:有关python编码混乱

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

我运行该脚本,但所提出的错误:UnicodeDecodeError:'ascii'编解码器无法解码字节......但是,我尝试了交互式python命令行中的代码,没有提出错误,您能否给我提供线索?

+1

“ASCII”编解码器不能__what__字节解码? – Propeng 2010-05-25 11:17:23

+1

你的意思是'html + = unicode(rs [0],'big5')' – Amarghosh 2010-05-25 11:17:31

回答

1

您致电unicode()工作正常。它是串联,它将一个unicode对象添加到字节字符串中,这是造成麻烦的原因。如果您将第一行更改为u'''<tr><td>'''(或u'<tr><td>'),它应该可以正常工作。

编辑:这意味着你的错误之处在于,已经在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' 
>>> 
+2

如果可能,您应该始终处理unicode对象。尽可能快地将输入解码为unicode。尽可能晚地将输出编码为特定的编码(例如,utf-8)。尽可能使用'codecs.open()'而不是内置的'open()'。 – jcdyer 2010-05-25 15:14:46

2

如果html还不是一个unicode对象,而是一个普通的字符串,当它与转换后的版本rs[0]连接时,它会转换为unicode。如果html现在包含特殊字符,则可能会出现unicode错误。

因此html的其他内容也需要正确解码为unicode。如果特殊字符来自字符串文字,您可以使用unicode文字(如u"abcä")。

+0

那么我应该用什么编码的html,所以html内容在邮件中正确显示? – 2010-05-25 12:44:14

+0

@zhangzhong:你应该使用HTML编码的编码。只有你可以知道是什么编码,但是如果它与其他数据相同,它可能是'big5'。 – sth 2010-05-25 21:51:29