Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Django处理IRI_Python_Django_Url_Unicode - Fatal编程技术网

Python 在Django处理IRI

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

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