'str' object has no attribute 'decode'. Python 3 error?
这是我的代码:
1 2 3 4 5 6 7 8 9 | import imaplib from email.parser import HeaderParser conn = imaplib.IMAP4_SSL('imap.gmail.com') conn.login('[email protected]', 'password') conn.select() conn.search(None, 'ALL') data = conn.fetch('1', '(BODY[HEADER])') header_data = data[1][0][1].decode('utf-8') |
此时,我收到错误消息
1 | AttributeError: 'str' object has no attribute 'decode' |
python 3不再解码了,对吗?我怎么修这个?
此外,在:
1 | data = conn.fetch('1', '(BODY[HEADER])') |
我只选择第一封电子邮件。如何全选?
您正在尝试解码已解码的对象。你有一个
只需去掉
1 | header_data = data[1][0][1] |
至于你的
The message_set options to commands below is a string specifying one or more messages to be acted upon. It may be a simple message number (
'1' ), a range of message numbers ('2:4' ), or a group of non-contiguous ranges separated by commas ('1:3,6:9' ). A range can contain an asterisk to indicate an infinite upper bound ('3:*' ).
从python 3开始,所有字符串都是unicode对象。
1 2 | a = 'Happy New Year' # Python 3 b = unicode('Happy New Year') # Python 2 |
之前的代码是相同的。所以我认为你应该把
按此方法使用:
1 | str.encode().decode() |
我不熟悉这个库,但是如果您的问题是不需要字节数组,一个简单的方法是在转换中直接指定编码类型:
1 2 3 4 5 | >>> my_byte_str b'Hello World' >>> str(my_byte_str, 'utf-8') 'Hello World' |
它已经在python3中解码,直接尝试它应该可以工作。