Python编码空间编码不正确

时间:2016-09-10 19:52:59

标签: python encoding urlencode

我有一本字典如下

params = {
        'response_type': 'token',
        'client_id': o_auth_client_id,
        'redirect_url': call_back_url,
        'scope': 'activity heartrate location'

}
print urllib.urlencode(params)

和um编码

但结果

  

REDIRECT_URL = HTTP%3A%2F%2F127.0.0.1%3A8084%2Fagile_healtg%2Faccess_token%2F&安培; RESPONSE_TYPE =令牌安培; CLIENT_ID = XXXXXX&安培;范围=活动+心率+位置

你得到的东西就像上面那样 不幸的是,空格被编码为+符号

但结果应为

  

范围=活性(%)20nutrition%20heartrate

如何在python中实现正确的空格编码?

2 个答案:

答案 0 :(得分:1)

查看urlencode的文档。

在传递键值时,quote_plus方法用于将空格更改为加号。您可以使用unquote_plus方法删除加号,然后使用quote以您希望的格式对其进行编码。

您基本上需要使用quote方法作为参数

答案 1 :(得分:1)

这个程序可能会满足您的要求。

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