我編寫了一些Python代碼來從Gmail服務器獲取電子郵件。這裏是下面的代碼:Python解析中文電子郵件解碼錯誤
self.M = imaplib.IMAP4_SSL(self.IMAP_SERVER, self.IMAP_PORT)
data = self.M.fetch(id,"(RFC822)")
if data[0] == 'OK':
msg = email.message_from_string(data[1][0][1])
else:
print 'Error!'
mail_subject = email.Header.decode_header(msg['subject'])[0][0]
print email.Header.decode_header(msg['subject'])
print '~~~separator~~~'
print mail_subject
英文郵件主題中正確顯示:
[('[bonnshore.github.com] Page build successful', None)]
~~~separator~~~
[bonnshore.github.com] Page build successful
但中國,而不是後:
[('\xd5\xe2\xca\xc7\xd6\xd0\xce\xc4\xb2\xe2\xca\xd4\xa3\xa1', 'gb2312')]
~~~separator~~~
╒Γ╩╟╓╨╬─▓Γ╩╘úí
功能isinstance()顯示字符的類型是「海峽', 所以我試過這個來解決它:
print unicode(mail_subject, 'gb2312')
和發生錯誤:
File "C:\Python27\lib\encodings\cp437.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-6:
character maps to <undefined>
我也tryed的字符直接解碼:
print mail_subject.decode("gb2312")
,我再次得到了同樣的錯誤!
那麼,如何解決這個問題?
非常感謝! :)
你確定數據實際上是用'gb2312'編碼的嗎?有一個原因,decode_header返回一個元組,包括實際使用的編碼;) – Voo 2013-03-20 06:51:07