python:解码字符串

-1 投票
2 回答
4690 浏览
提问于 2025-04-16 11:23

有人能给点建议,怎么解码这些字符串吗?

它们是电子邮件主题的一部分。

=?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)

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

撰写回答