Что такое кодирование текста?

Я использовал Python imaplib, чтобы вытащить почту из учетной записи gmail... но я получил электронное письмо с этим запутанным текстом:

> RGF0ZSBldCBoZXVyZTogICAgICAgICAgICAgICAgICAgICAgICAgICAyMi8wOC8yMDEwIDE0
> OjMzOjAzIEdNVCBVbmtub3duDQpQcsOpbm9tOiAgICAgICAgICAgICAgICAgICAgICAgICAg
> ICAgICAgICAgamFjaW50bw0KTm9tOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
> ICAgICBjYXJ2YWxobw0KRS1NYWlsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg

кто может помочь мне прочитать этот файл из моего письма...

спасибо

се

3 ответа

Он выглядит как base64. В Python вы можете использовать base64.b64decode или str.decode('base64').

message = '''
RGF0ZSBldCBoZXVyZTogICAgICAgICAgICAgICAgICAgICAgICAgICAyMi8wOC8yMDEwIDE0
OjMzOjAzIEdNVCBVbmtub3duDQpQcsOpbm9tOiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgamFjaW50bw0KTm9tOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYXJ2YWxobw0KRS1NYWlsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
'''
print message.decode('base64')

Результат:

Date et heure: 22/08/2010 14:33:03 GMT Unknown
Prénom: jacinto
Nom: carvalho
E-Mail:

é выглядит неправильно. Похоже, что текст был закодирован в UTF-8, поэтому вам также необходимо декодировать кодировку UTF-8:

print message.decode('base64').decode('utf-8')

Результат:

...
Prénom:
...

Еще одна вещь, о которой следует помнить, заключается в том, что существуют разные варианты кодировок Base64, которые отличаются двумя символами, которые они используют для значений 62 и 63. Используя base64.b64decode, вы можете указать эти два символа, если значения по умолчанию не работают для вас.


Марк в основном правильный, но он также кодируется UTF-8, о чем свидетельствует \uc3a9 в "Prénom".

(И я пытаюсь понять, почему я получаю правильное декодирование, а Mark не для одного и того же кода, но это еще одна проблема.)


Это Base-64 UTF-8. В этом конкретном тексте говорится:

Date et heure: 22/08/2010 14:33:03 GMT Unknown
Prénom: jacinto
Nom: carvalho
E-Mail:

licensed under cc by-sa 3.0 with attribution.