Python 编码空间编码不正确
Python Encode Spaces are incorrectly encoded
我有一个字典如下
params = {
'response_type': 'token',
'client_id': o_auth_client_id,
'redirect_url': call_back_url,
'scope': 'activity heartrate location'
}
print urllib.urlencode(params)
并对其进行编码
但在结果中
redirect_url=http%3A%2F%2F127.0.0.1%3A8084%2Fagile_healtg%2Faccess_token%2F&response_type=token&client_id=xxxxxx&scope=activity+heartrate+location
嗯得到类似上面的东西
不幸的是,空格被编码为 + 号
但结果应该是
scope=activity%20nutrition%20heartrate
如何实现 python 中空格的正确编码?
查看 urlencode 的文档。
quote_plus
方法用于在传递键值时将空格更改为加号。您可以使用 unquote_plus
方法删除加号,然后 quote
以您想要的格式对其进行编码。
你基本上需要为你的参数使用quote
方法
此程序可能会满足您的要求。
import urllib
def my_special_urlencode(params):
return '&'.join('{}={}'.format(urllib.quote(k, ''), urllib.quote(v, '')) for k,v in params.items())
params = {
'response_type': 'token',
'client_id': 'xxxxxx',
'redirect_url': 'http://example.com/callback',
'scope': 'activity heartrate location'
}
print my_special_urlencode(params)
结果:
redirect_url=http%3A%2F%2Fexample.com%2Fcallback&response_type=token&client_id=xxxxxx&scope=activity%20heartrate%20location
我有一个字典如下
params = {
'response_type': 'token',
'client_id': o_auth_client_id,
'redirect_url': call_back_url,
'scope': 'activity heartrate location'
}
print urllib.urlencode(params)
并对其进行编码
但在结果中
redirect_url=http%3A%2F%2F127.0.0.1%3A8084%2Fagile_healtg%2Faccess_token%2F&response_type=token&client_id=xxxxxx&scope=activity+heartrate+location
嗯得到类似上面的东西 不幸的是,空格被编码为 + 号
但结果应该是
scope=activity%20nutrition%20heartrate
如何实现 python 中空格的正确编码?
查看 urlencode 的文档。
quote_plus
方法用于在传递键值时将空格更改为加号。您可以使用 unquote_plus
方法删除加号,然后 quote
以您想要的格式对其进行编码。
你基本上需要为你的参数使用quote
方法
此程序可能会满足您的要求。
import urllib
def my_special_urlencode(params):
return '&'.join('{}={}'.format(urllib.quote(k, ''), urllib.quote(v, '')) for k,v in params.items())
params = {
'response_type': 'token',
'client_id': 'xxxxxx',
'redirect_url': 'http://example.com/callback',
'scope': 'activity heartrate location'
}
print my_special_urlencode(params)
结果:
redirect_url=http%3A%2F%2Fexample.com%2Fcallback&response_type=token&client_id=xxxxxx&scope=activity%20heartrate%20location