Gmail API - просмотр странных немецких символов с использованием «сырого» вывода и декодирование в utf-8 - PullRequest
0 голосов
/ 04 марта 2019

У меня проблемы с кодировкой при чтении писем с использованием Gmail API.Сначала я получаю письмо, используя это:

message = service.users().messages().get(userId='me', id='169481bce75af185', format='raw').execute()

После этого я использую эти строки, чтобы извлечь из них строку и преобразовать ее в сообщение MIME:

msg_str = str(base64.urlsafe_b64decode(message['raw'].encode('utf-8')).decode('utf-8'))
mime_msg = email.message_from_string(msg_str)

Затем я печатаю чтоЯ получил:

print(mime_msg.get_payload()[0])

Однако я вижу некоторые странные символы в выводе, например:

Gesch=C3=A4ftsf=C3=BChrer

В заголовке сообщения я вижу это:

Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Что я сделал не так и как я могу получить правильный вывод без странных символов?

Спасибо за ваше время

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

, как предложил BoarGules, теперь он правильно отображает символы.Просмотр этого сайта также привел меня к этой полезной функции:

def decode_email(msg_str):
    p = Parser()
    message = p.parsestr(msg_str)
    decoded_message = ''
    for part in message.walk():
        charset = part.get_content_charset()
        if part.get_content_type() == 'text/plain':
            part_str = part.get_payload(decode=1)
            decoded_message += part_str.decode(charset)
    return decoded_message

, которая преобразует строку сообщения в расшифрованную строку, отображая правильно обозначенные символы.

0 голосов
/ 04 марта 2019

Ваши данные были закодированы в формате UTF-8, а затем стали безопасными для 7-битной передачи путем дальнейшего кодирования для печати в кавычках.Это то, что говорит вам заголовок сообщения.Используйте quopri для отмены цитируемой печати, а затем .decode для получения Unicode:

>>> import quopri
>>> print(quopri.decodestring("Gesch=C3=A4ftsf=C3=BChrer").decode("utf-8"))
Geschäftsführer
...