如何让 urllib 仅取消引用有效的 % 编码字符串?
html_parser = HTMLParser.HTMLParser()
url = 'Time-@#*%ed%20&'
print urllib2.unquote(url)
print html_parser.unescape(url)
结果是
Time-@#*� &
Time-@#*%ed%20&
urllib unquote '%20' to ' ',但它也错误地 unquote '%ed' to '�'
HTMLParser 可以转义 '&' 到 '&',但它不能将 '%20' 转换为 ' '
- - - - - - - 编辑 - - -
我很抱歉没有很好地解释我的问题,事实上我有很多字符串要处理,有些是 URL,有些不是。原始字符串是Time-@#*%ed
,我将字符串设置Time-@#*%ed%20&
为包含这两种情况。事实证明,很难在一行代码中处理这两种情况。阅读答案后,我编写了自己的函数
#!/bin/env python
#coding: utf8
import sys
import os
import HTMLParser
import re
import urllib
html_parser = HTMLParser.HTMLParser()
url_pattern = re.compile('^(ftp|http|https)://.{4,}', flags=re.I)
def unquote_string(url):
if url_pattern.search(url):
while True:
url1 = urllib.unquote(url)
if url1 == url: break
url = url1
else:
while True:
url1 = html_parser.unescape(url)
if url1 == url: break
url = url1
return url
url = 'Time-@#*%ed%20&'
print urllib.unquote(url)
print html_parser.unescape(url)
print unquote_string(url)