如何在Python中对URL参数进行百分比编码?
如果我做
url = "http://example.com?p=" + urllib.quote(query)
- 它不编码
/
到%2F
(打破OAuth标准化) - 它不处理Unicode(它抛出一个exception)
有更好的图书馆吗?
从文档 :
urllib.quote(string[, safe])
使用%xx转义replacestring中的特殊字符。 字母,数字和字符'_.-'从不引用。 默认情况下,此函数用于引用URL的path部分。可选的safe参数指定不应引用的附加字符 – 其默认值为“/”
这意味着通过“安全”将解决你的第一个问题:
>>> urllib.quote('/test') '/test' >>> urllib.quote('/test', safe='') '%2Ftest'
关于第二个问题,这里有一个关于它的错误报告。 显然它是固定在Python 3.你可以通过编码utf8这样的解决方法:
>>> query = urllib.quote(u"Müller".encode('utf8')) >>> print urllib.unquote(query).decode('utf8') Müller
顺便看看urlencode
请注意, urllib.quote
移至urllib.parse.quote
中的urllib.parse.quote
在Python 3中, urllib.quote
已经被移到了urllib.parse.quote
并且默认处理unicode。
>>> from urllib.parse import quote >>> quote('/test') '/test' >>> quote('/test', safe='') '%2Ftest' >>> quote('/El Niño/') '/El%20Ni%C3%B1o/'
我的答案与保罗的答案相似。
我认为模块requests
好得多。 它基于urllib3
。 你可以试试这个:
>>> from requests.utils import quote >>> quote('/test') '/test' >>> quote('/test', safe='') '%2Ftest'
如果你使用的是django,你可以使用urlquote:
>>> from django.utils.http import urlquote >>> urlquote(u"Müller") u'M%C3%BCller'