2010-12-07 40 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