0

我正在使用 urllib2 获取网站的源代码,然后我使用正则表达式过滤 bas64 编码字符串,并对其进行迭代,将匹配项传递给函数:

def Base64Decoder(match):  
    curMatch = match.group().decode('utf-8', errors='ignore')  
    decoded = base64.b64decode(curMatch)   
    return decoded

当我打印出 Base64Decoder 的返回值时,一些字符是错误的,如何正确过滤掉它们?我不想看到像下面这样的乱码:

赛格温 linux

网站的编码是utf-8,但urllib的返回值似乎是unicode?

编辑:源代码看起来像这样(原始)

<td style="text-align:left; font-weight:bold;"><script type="text/javascript">document.write(Base64.decode("MzEuMTMuMTcuMjE0"))</script></td>

并且过滤后的字符串被Base64.decode("MzEuMTMuMTcuMjE0条带化为MzEuMTMuMTcuMjE0

4

1 回答 1

1

您可能没有正确剥离它,Base64.decode("前缀也留在剥离后的字符串中。您可以在下一个示例中看到:

>>> print base64.b64decode('Base64.decode("MzEuMTMuMTcuMjE0')
��^r�^31.13.17.214

如果您有类似这样的模式:

>>> pattern = re.compile('Base64.decode\("(...)"\)')

(参见 SO 问题:RegEx to parse or validate Base64 data

group()将返回完全匹配的字符串:

>>> pattern.search(s).group()
'Base64.decode("MzEuMTMuMTcuMjE0")'

你需要的是:

>>> pattern.search(s).groups()[0]
'MzEuMTMuMTcuMjE0'
于 2013-09-18T08:06:53.470 回答