解码URL中的转义字符

时间:2011-11-15 13:06:26

标签: python escaping

我有一个列表,其中包含带有转义字符的网址。这些字符在urllib2.urlopen恢复html页面时已设置:

http://www.sample1webpage.com/index.php?title=%E9%A6%96%E9%A1%B5&action=edit
http://www.sample1webpage.com/index.php?title=%E9%A6%96%E9%A1%B5&action=history
http://www.sample1webpage.com/index.php?title=%E9%A6%96%E9%A1%B5&variant=zh 

有没有办法在python中将它们转换回未转义的形式?

P.S。:URL以utf-8编码

5 个答案:

答案 0 :(得分:116)

Official docs.

  

urllib.unquote( string )

     

%xx转义符替换为单字符等效值。

     

示例:unquote('/%7Econnolly/')产生'/~connolly/'

然后解码。


<强>更新 对于Python 3,请编写以下内容:

urllib.parse.unquote(url)

Python 3 docs.

答案 1 :(得分:24)

如果您使用的是Python3,则可以使用:

urllib.parse.unquote(url)

答案 2 :(得分:9)

urllib.unquote_plus

>>> import urllib
>>> urllib.unquote('erythrocyte+membrane+protein+1%2C+PfEMP1+%28VAR%29')
'erythrocyte+membrane+protein+1,+PfEMP1+(VAR)'
>>> urllib.unquote_plus('erythrocyte+membrane+protein+1%2C+PfEMP1+%28VAR%29')
'erythrocyte membrane protein 1, PfEMP1 (VAR)'

答案 3 :(得分:7)

您可以使用urllib.unquote

答案 4 :(得分:4)

import re

def unquote(url):
  return re.compile('%([0-9a-fA-F]{2})',re.M).sub(lambda m: chr(int(m.group(1),16)), url)