如何使用python将西里尔字母WINDOWS-1251字符串解码为unicode

时间:2019-01-26 03:39:32

标签: python unicode

我有一个很大的(2.5 GB)文本文件,其中包含各种编码的西里尔字母,包括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 :(得分:4)

该数据根据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')
'Рвись в атаку н= а «Першинге»'