Как декодировать кириллическую строку WINDOWS-1251 в юникод, используя python - PullRequest
0 голосов
/ 26 января 2019

У меня очень большой (2,5 ГБ) текстовый файл с кириллическими символами в различных кодировках, включая Windows-1251:

= D0 = A0 = D0 = B2 = D0 = B8 = D1 = 81 = D1 = 8C = D0 = B2 = D0 = B0 = D1 = 82 = D0 = B0 = D0 = BA = D1 = 83 = D0 = BD = = D0 = B0 = C2 = AB = D0 = 9F = D0 = B5 = D1 = 80 = D1 = 88 = D0 = B8 = D0 = BD = D0 = B3 = D0 = B5 = C2 = BB

Я уже пробовал .encode () и .decode () с различными комбинациями кодировок, но я не могу получить текст для чтения. Я также пытался читать в двоичном режиме.

with open('myfile.mbox', 'r') as f:
    unreadable_str = f.readline()

unreadable_str.encode('WINDOWS-1251').decode('utf-8') 

Я думал, что она закодирует строку в байты, используя кодировку Windows, а затем вернет ее как читаемый Unicode, но вместо этого она всегда выводит одну и ту же строку.

1 Ответ

0 голосов
/ 26 января 2019

Эти данные кодируются в соответствии с RFC 1522 .Модуль quopri может использоваться для декодирования данных в байты, которые выглядят как данные в кодировке UTF-8:

>>> s='''=D0=A0=D0=B2=D0=B8=D1=81=D1=8C =D0=B2 =D0=B0=D1=82=D0=B0=D0=BA=D1=83 =D0=BD= =D0=B0 =C2=AB=D0=9F=D0=B5=D1=80=D1=88=D0=B8=D0=BD=D0=B3=D0=B5=C2=BB'''
>>> quopri.decodestring(s).decode('utf8')
'Рвись в атаку н= а «Першинге»'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...