2010-12-07 7 views
4

La documentation de Django comporte une [bonne section] sur la gestion des chaînes avec des données non-ASCII dans les URL. En particulier, il présente l'exemple suivant sur la façon de transformer les chaînes Unicode dans les URL:Gestion de l'IRI dans Django

>>> urlquote(u'Paris & Orléans') 
u'Paris%20%26%20Orl%C3%A9ans' 
>>> iri_to_uri(u'/favorites/François/%s' % urlquote(u'Paris & Orléans')) 
'/favorites/Fran%C3%A7ois/Paris%20%26%20Orl%C3%A9ans' 

Cependant, il semble y avoir aucune indication sur la façon d'effectuer la transformation inverse!

En supposant que mon application reçoive l'adresse URL /favorites/Fran%C3%A7ois/Paris%20%26%20Orl%C3%A9ans, comment puis-je mapper cela à et Paris & Orléans?

Il n'y a pas de fonction django.utils.encoding.uri_to_iri pour compléter django.utils.encoding.iri_to_uri et il n'y a pas django.utils.http.urlunquote pour compléter django.utils.http.urlquote()!

Remarque:

Si cela aide du tout, j'utilise Django 1.2 sur

  • Python 2.5, Debian Linux 32 bits
  • Python 2.6, Windows 7 64 bits .

Répondre

3

La urllib.unquote() norme devrait fonctionner très bien dans ce cas:

>>> urllib.unquote('/favorites/Fran%C3%A7ois/Paris%20%26%20Orl%C3%A9ans') 
'/favorites/Fran\xc3\xa7ois/Paris & Orl\xc3\xa9ans' 
+0

Whoa, c'est bizarre! 'urllib.quote()' ne gère pas les données unicode, mais 'urllib.unquote' gère très bien UTF-8! Ça marche! –

+0

Pas tout à fait. 'urllib.unquote()' renvoie un bytestring, et c'est à vous de le décoder depuis UTF-8. 'urllib.quote()' attend un bytestring aussi, il gère très bien unicode si vous codez d'abord la chaîne unicode en UTF-8. –

+0

Exemple: 'urllib.quote ('u'ad''encode (' utf8 ')) =>'% C3% A0% C3% A8% C3% A6'' –

1

C'est parce que urllib.unquote fait pour vous:

>>> import urllib 
>>> print urllib.unquote('/favorites/Fran%C3%A7ois/Paris%20%26%20Orl%C3%A9ans') 
/favorites/François/Paris & Orléans 
Questions connexes