在Django中处理IRI

时间:2010-12-07 23:46:30

标签: python django url unicode

Django文档有一个关于处理URL中非ASCII数据的字符串的[很好的部分]。特别是,它提供了以下关于如何转换Unicode字符串以在URL中使用的示例:

>>> 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'

然而,似乎没有关于如何进行逆向转换的迹象!

假设我的应用程序收到了网址/favorites/Fran%C3%A7ois/Paris%20%26%20Orl%C3%A9ans,如何将其映射回/favorites/François/Paris & Orléans

没有django.utils.encoding.uri_to_iri功能来补充django.utils.encoding.iri_to_uri,并且没有django.utils.http.urlunquote来补充django.utils.http.urlquote()

注意

如果这有帮助,我正在使用Django 1.2

  • Python 2.5,Debian Linux 32位
  • Python 2.6,Windows 7 64位。

2 个答案:

答案 0 :(得分:3)

在这种情况下,标准urllib.unquote()应该可以正常工作:

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

答案 1 :(得分:1)

那是因为urllib.unquote为你做了这件事:

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