Oto mój kod:
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')
w tym momencie pojawia się komunikat o błędzie
AttributeError: 'str' object has no attribute 'decode'
Python 3 nie ma już dekodowania, mam rację? jak mogę to naprawić?
Także w:
data = conn.fetch('1', '(BODY[HEADER])')
Wybieram tylko pierwszy e-mail. Jak wybrać wszystko?
źródło
decode
atrybutu lub po prostu złap wyjątek.try: data = data.decode('...') except AttributeError: pass
.Zaczynając od Pythona 3, cały ciąg znaków jest obiektem Unicode.
kod przed jest taki sam. Więc myślę, że powinieneś usunąć
.decode('utf-8')
. Ponieważ masz już obiekt Unicode.źródło
Użyj tej metody:
źródło
bytearray(str, 'encoding').decode('another_encoding')
wykona zadanie, jeśli potrzebujesz dekodowaćidna
lub innego kodowania'\u0159'
drukuje dokładnie to samo wyjście. Mylisz składnię literału ciągu znaków z kanoniczną reprezentacją wartości.W przypadku Python3
źródło
Nie znam biblioteki, ale jeśli Twoim problemem jest to, że nie chcesz tablicy bajtów, jednym prostym sposobem jest określenie typu kodowania bezpośrednio w rzutowaniu:
źródło
bytes
obiektu istr(bytes_object, codec)
są po prostu alternatywną pisowniąbytes_object.decode(codec)
. Oba zawodzą, jeśli naprawdę maszstr
zamiast tego.str
już ma. Ta odpowiedź może być nadal przydatna dla osób w przyszłości, które mogą mieć tablice bajtów (był to problem, z którym miałem do czynienia, gdy natknąłem się na ten post).my_byte_str.decode
istnieje i działa, a wyjątku w pytaniu nie wrzucę.Jest już zdekodowany w Pythonie3, Spróbuj bezpośrednio, powinno działać.
źródło
Inne odpowiedzi trochę na to wskazują, ale problem może wynikać z oczekiwania obiektu bajtów. W Pythonie 3 dekodowanie jest poprawne, gdy masz obiekt klasy bajtów. Uruchomienie kodowania przed dekodowaniem może "naprawić" problem, ale jest to bezużyteczna para operacji, która sugeruje problem nam nadrzędnym.
źródło