2010-12-07 69 views
4

Django文档在处理URL中的非ASCII数据的字符串时有一个[很好的部分]。特别是,对如何在下面的例子来变换Unicode字符串用在网址:在Django中处理IRI

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

然而,似乎是关于如何执行反向转换没有迹象!

假设我的应用程序收到URL /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位。

回答

3

标准urllib.unquote()应该在这种情况下工作得很好:

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

哇,这是奇怪! `urllib.quote()`不处理unicode数据,但'urllib.unquote`处理UTF-8就好!有用! – 2010-12-07 23:51:26

1

这是因为urllib.unquote为您完成此:

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