我取回從數據庫中文編碼的數據,我想將數據發送爲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