有人可以就如何解码这些字符串提出建议吗? 它们是电子邮件主题的一部分。
=?Windows-1251?B?ICLRLcvu5Obo8fLo6iI?=
=?koi8-r?B?5tLPzM/XwSDtwdLJzsEg98nUwczYxdfOwQ?=
=?Windows-1251?B?1PDu6+7i4CDM4PDo7eAgwujy4Ov85eLt4A?=
可能需要获取字符串ICLRLcvu5Obo8fLo6iI
的内部部分然后base64.decodestring(string).decode('windows-1251')
这种方法在大多数情况下都适用,但不适用于这些字符串:(
base64.decodestring('ICLRLcvu5Obo8fLo6iI')
---------------------------------------------------------------------------
Error Traceback (most recent call last)
/home/alecs/<ipython console> in <module>()
/usr/lib/python2.6/base64.pyc in decodestring(s)
319 def decodestring(s):
320 """Decode a string."""
--> 321 return binascii.a2b_base64(s)
322
323
Error: Incorrect padding
答案 0 :(得分:4)
test = [
'=?Windows-1251?B?ICLRLcvu5Obo8fLo6iI?=',
'=?koi8-r?B?5tLPzM/XwSDtwdLJzsEg98nUwczYxdfOwQ?=',
'=?Windows-1251?B?1PDu6+7i4CDM4PDo7eAgwujy4Ov85eLt4A?='
]
def decodeStr(s):
s = s.split('?')
enc = s[1]
dat = s[3]
return (dat+'===').decode('base-64').decode(enc)
for t in test:
print decodeStr(t)
答案 1 :(得分:2)
似乎这些字符串编码错误,最后没有填充。 base64字符串应始终具有4个字符的倍数。填充字符是=,如果长度不是4的倍数,您可以手动添加它。以下是您的示例的结果:
>>> print "ICLRLcvu5Obo8fLo6iI=".decode ('base-64').decode ('Windows-1251')
"С-Лоджистик"
>>> print "5tLPzM/XwSDtwdLJzsEg98nUwczYxdfOwQ==".decode ('base-64').decode ('koi8-r')
Фролова Марина Витальевна
>>> print "1PDu6+7i4CDM4PDo7eAgwujy4Ov85eLt4A==".decode ('base-64').decode ('Windows-1251')
Фролова Марина Витальевна
注意分别添加1,2和2'='符号。