Почему использование Message.get_payload () дает правильную строку, а использование Message.get_payload (decode = True) дает неправильную строку? - PullRequest
0 голосов
/ 27 мая 2020

Мой код подключается к почтовому ящику и читает темы и содержимое каждого письма.

Мой код:

def decode_email(self, raw_email):
    msg=email.message_from_string(raw_email.decode('utf-8')) 

    content = ''
    if msg.is_multipart():
        for part in msg.walk(): 
            print('multipart')
            thispart = part.get_payload(decode=True)
            if part.get_content_type() == 'text/plain':
                if isinstance(thispart, bytes): 
                    thispart = thispart.decode()
                content = content + thispart
    else:
        content = msg.get_payload(decode=True)  #THIS LINE HAS A PROBLEM
        if isinstance(content, bytes):
            content = content.decode()

При составлении нескольких частей все кажется go хорошо.

Но когда односоставный, content = msg.get_payload(decode=True) дает странный результат.

b '\ ub0b4 \ uc6a9 \ r \ n'

И content = content.decode() дает

\ ub0b4 \ uc6a9

, чего я не ожидал.

Но когда я удаляю опцию декодирования, content = msg.get_payload(), появляется правая строка.

Почему это происходит?

В документе кажется, что строка декодируется только при необходимости.

Любая мысль приветствуется :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...