web-dev-qa-db-fra.com

Décoder les caractères échappés dans l'URL

J'ai une liste contenant des URL avec des caractères d'échappement en eux. Ces caractères ont été définis par urllib2.urlopen quand il récupère la page 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 

Existe-t-il un moyen de les ramener à leur forme non échappée en python?

P.S .: Les URL sont codées en utf-8

72
Tony

Documents officiels.

urllib.unquote( chaîne)

Remplacer %xx S'échappe par leur équivalent d'un caractère.

Exemple: unquote('/%7Econnolly/') donne '/~connolly/'.

Et puis juste décoder.


Mise à jour: Pour Python 3, écrivez ce qui suit:

urllib.parse.unquote(url)

documentation Python 3.

123

Et si vous utilisez Python3 vous pouvez utiliser:

urllib.parse.unquote(url)
25

ou 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)'
9
dli

Vous pouvez utiliser urllib.unquote

7
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)
4
mistercx