Python 在Django处理IRI
Django文档有一个[nice部分]介绍如何处理URL中包含非ASCII数据的字符串。特别是,它提供了以下有关如何转换Unicode字符串以在URL中使用的示例:Python 在Django处理IRI,python,django,url,unicode,Python,Django,Url,Unicode,Django文档有一个[nice部分]介绍如何处理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')) '/fav
>>> 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/
和巴黎和奥尔良
没有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位
urllib.unquote()
应该可以正常工作:
>>> urllib.unquote('/favorites/Fran%C3%A7ois/Paris%20%26%20Orl%C3%A9ans')
'/favorites/Fran\xc3\xa7ois/Paris & Orl\xc3\xa9ans'
这是因为
urllib.unquote
为您执行以下操作:
>>> import urllib
>>> print urllib.unquote('/favorites/Fran%C3%A7ois/Paris%20%26%20Orl%C3%A9ans')
/favorites/François/Paris & Orléans
哇,真奇怪
urllib.quote()
不处理unicode数据,但urllib.unquote
可以处理UTF-8!它起作用了!不完全是urllib.unquote()
返回一个bytestring,由您从UTF-8对其进行解码urllib.quote()
也需要一个bytestring,如果您先将unicode字符串编码为UTF-8,它可以很好地处理unicode。例如:urllib.quote(u'ąęę.encode('utf8')=>“%C3%A0%C3%A8%C3%A6”
是的,这是我做的第一件事urllib.unquote(x).decode('UTF-8')