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