我取回从数据库中文编码的数据,我想将数据发送为HTML内容的电子邮件时,代码是这样的:有关python编码混乱
html += """<tr><td>"""
html += unicode(rs[0], 'big5') # rs[0] is data encoded in big5
我运行该脚本,但所提出的错误:UnicodeDecodeError:'ascii'编解码器无法解码字节......但是,我尝试了交互式python命令行中的代码,没有提出错误,您能否给我提供线索?
我取回从数据库中文编码的数据,我想将数据发送为HTML内容的电子邮件时,代码是这样的:有关python编码混乱
html += """<tr><td>"""
html += unicode(rs[0], 'big5') # rs[0] is data encoded in big5
我运行该脚本,但所提出的错误:UnicodeDecodeError:'ascii'编解码器无法解码字节......但是,我尝试了交互式python命令行中的代码,没有提出错误,您能否给我提供线索?
您致电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'
>>>
如果可能,您应该始终处理unicode对象。尽可能快地将输入解码为unicode。尽可能晚地将输出编码为特定的编码(例如,utf-8)。尽可能使用'codecs.open()'而不是内置的'open()'。 – jcdyer 2010-05-25 15:14:46
如果html
还不是一个unicode对象,而是一个普通的字符串,当它与转换后的版本rs[0]
连接时,它会转换为unicode。如果html
现在包含特殊字符,则可能会出现unicode错误。
因此html
的其他内容也需要正确解码为unicode。如果特殊字符来自字符串文字,您可以使用unicode文字(如u"abcä"
)。
那么我应该用什么编码的html,所以html内容在邮件中正确显示? – 2010-05-25 12:44:14
@zhangzhong:你应该使用HTML编码的编码。只有你可以知道是什么编码,但是如果它与其他数据相同,它可能是'big5'。 – sth 2010-05-25 21:51:29
“ASCII”编解码器不能__what__字节解码? – Propeng 2010-05-25 11:17:23
你的意思是'html + = unicode(rs [0],'big5')' – Amarghosh 2010-05-25 11:17:31