Python中的URL编码
我是不是漏掉了什么简单的方法,在urllib
或者其他库里可以完成这个任务?URL编码是把不安全的ASCII字符替换成一个“%”符号,后面跟着两个十六进制数字。
这里有一个输入的例子和我期望的输出:
Mozilla/5.0 (Linux; U; Android 4.0; xx-xx; Galaxy Nexus Build/IFL10C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30
Mozilla%2F5.0+%28Linux%3B+U%3B+Android+4.0%3B+xx-xx%3B+Galaxy+Nexus+Build%2FIFL10C%29+AppleWebKit%2F534.30+%28KHTML%2C+like+Gecko%29+Version%2F4.0+Mobile+Safari%2F534.30
3 个回答
1
另外,如果你有一个包含多个值的字典,最好的做法是使用 urllib.urlencode
。
3
请注意,urllib.quote 和 urllib.quote_plus 这两个函数在输入是 Unicode 字符串时会报错:
s = u'\u2013'
urllib.quote(s)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\urllib.py", line 1303, in quote
return ''.join(map(quoter, s))
KeyError: u'\u2013'
正如在这里的回答中提到的,必须明确使用 'UTF-8' 编码:
urllib.quote(s.encode('utf-8'))
53
对于 Python 2.x,你可以使用 urllib.quote
这个方法可以用来替换字符串中的特殊字符,使用的是 %xx 的方式来表示。字母、数字和字符 '_.-' 是不会被替换的。默认情况下,这个函数是用来处理 URL 的路径部分的。你还可以使用一个可选的 safe 参数,来指定一些额外的字符不需要被替换,默认值是 '/'。
举个例子:
In [1]: import urllib
In [2]: urllib.quote('%')
Out[2]: '%25'
编辑:
在你的情况下,如果想把空格替换成加号,你可以使用 urllib.quote_plus
举个例子:
In [4]: urllib.quote_plus('a b')
Out[4]: 'a+b'
对于 Python 3.x,你可以使用 quote
>>> import urllib
>>> a = "asdas#@das"
>>> urllib.parse.quote(a)
'asdas%23%40das'
如果字符串中有空格,可以使用 quote_plus
>>> import urllib
>>> a = "as da& s#@das"
>>> urllib.parse.quote_plus(a)
'as+da%26+s%23%40das'