Что это за кодировка текста? - PullRequest
4 голосов
/ 22 августа 2010

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

> RGF0ZSBldCBoZXVyZTogICAgICAgICAgICAgICAgICAgICAgICAgICAyMi8wOC8yMDEwIDE0
> OjMzOjAzIEdNVCBVbmtub3duDQpQcsOpbm9tOiAgICAgICAgICAgICAgICAgICAgICAgICAg
> ICAgICAgICAgamFjaW50bw0KTm9tOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
> ICAgICBjYXJ2YWxobw0KRS1NYWlsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg

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

Thx

lo

Ответы [ 3 ]

14 голосов
/ 22 августа 2010

Похоже на 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, вы можете указать эти два символа, если значения по умолчанию не работают для вас.

1 голос
/ 22 августа 2010

Это Base-64 UTF-8. Этот конкретный текст говорит:

Date et heure:                           22/08/2010 14:33:03 GMT Unknown
Prénom:                                   jacinto
Nom:                                     carvalho
E-Mail:                                
1 голос
/ 22 августа 2010

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

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

...