Я пытаюсь проанализировать электронную почту, которая содержит заголовки не ASCII, например Тема , От и т. Д.
Если я пытаюсь прочитать файл электронной почты в двоичном виде:
import email
mail = email.message_from_binary_file(open(file_path, "rb"))
Я заменяю все символы (похоже, что пакет " email " пытается все закодировать как ASCII):
>>> str(mail.get("Subject"))
'����������'
И если я попытаюсь вместо этого прочитать сообщение как строку:
mail = email.message_from_file(open(file_path))
Я получаю исключение:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb1 in position 833: invalid start byte
С Python 2 я мог правильно обрабатывать такие случаи, получая строки в байтах, а затем определяя кодировку с помощью chardet :
from chardet import detect as detect_encoding
encoding = detect_encoding(val)["encoding"]
decoded = val.decode(encoding)
Есть ли способ получить такое же поведение в Python 3?