python编码的困惑

python编码的困惑,python,unicode,encoding,ascii,Python,Unicode,Encoding,Ascii,我从数据库中检索了big5编码的数据,我想将数据作为html内容的电子邮件发送,代码如下: html += """<tr><td>""" html += unicode(rs[0], 'big5') # rs[0] is data encoded in big5 html+=“” html+=unicode(rs[0],'big5')#rs[0]是用big5编码的数据 我运行了脚本,但出现了错误:UnicodeDecodeError:“ascii”编解

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

html += """<tr><td>"""        
html += unicode(rs[0], 'big5') # rs[0] is data encoded in big5
html+=“”
html+=unicode(rs[0],'big5')#rs[0]是用big5编码的数据

我运行了脚本,但出现了错误:UnicodeDecodeError:“ascii”编解码器无法解码字节。。。。。。但是,我在交互式python命令行中尝试了该代码,没有出现任何错误,您能告诉我线索吗?

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

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

unicode()
的调用工作正常。造成问题的是将unicode对象添加到字节字符串的串联。如果将第一行更改为
u'
,(或
u'
),它应该可以正常工作

编辑:这意味着您的错误存在于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'
>>> 
>>'\x9f'+unicode('\xc3\x60',big5')
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
UnicodeDecodeError:“ascii”编解码器无法解码位置0中的字节0x9f:序号不在范围(128)内
>>>u'\x9f'+unicode('\xc3\x60',big5')
u'\x9f\u56a5'
>>> 

'ascii'编解码器无法解码哪个字节?你的意思是
html+=unicode(rs[0],'big5')
那么我应该设置html的编码是什么,以便html内容在邮件中正确显示?@zhangzhong:你应该使用html编码的编码。只有您知道这是什么编码,但如果它与其他数据相同,则可能是“big5”。如果可能,您应该始终处理unicode对象。尽快将输入解码为unicode。尽可能晚地将输出编码为特定编码(例如utf-8)。尽可能使用
codecs.open()
而不是内置的
open()