python:解码字符串
有人能给点建议,怎么解码这些字符串吗?
它们是电子邮件主题的一部分。
=?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
2 个回答
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个“=”符号。
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)
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。