这是我的代码:


import imaplib
from email.parser import HeaderParser

conn = imaplib.IMAP4_SSL('imap.gmail.com')
conn.login('example@gmail.com', 'password')
conn.select()
conn.search(None, 'ALL')
data = conn.fetch('1', '(BODY[HEADER])')
header_data = data[1][0][1].decode('utf-8')

在这一点上,我得到错误消息:

AttributeError: 'str'对象没有'decode'属性

Python 3不再有str.decode(),所以我如何解决这个问题?


当前回答

它已经在Python3中解码,直接尝试它应该工作。

其他回答

您正在尝试解码一个已经解码的对象。你有一个str,就不再需要从UTF-8解码了。

只需删除.decode('utf-8')部分:

header_data = data[1][0][1]

使用方法:

str.encode().decode()

使用codecs模块的open()读取文件:

import codecs
with codecs.open(file_name, 'r', encoding='utf-8', errors='ignore') as fdata:

它已经在Python3中解码,直接尝试它应该工作。

这招对我很管用:

html.replace("\\/", "/").encode().decode('unicode_escape', 'surrogatepass')

这类似于json.loads(html)行为