解码/编码如何忽略可能的错误并删除/替换错误的字符?

时间:2013-09-18 07:25:33

标签: python python-2.7 encoding

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

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

当我打印出Base64Decoder的返回值时,某些字符错误,如何正确过滤它们?我不想看到如下的乱语:

Cygwin 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

1 个答案:

答案 0 :(得分:1)

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

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

如果你有类似的模式:

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

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

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

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

你需要的是:

>>> pattern.search(s).groups()[0]
'MzEuMTMuMTcuMjE0'