Как разобрать заголовки писем как байты, а не как строки в Python 3 - PullRequest
0 голосов
/ 11 марта 2019

Я пытаюсь проанализировать электронную почту, которая содержит заголовки не 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?

...