Python RFC 3986的urlencode()
Python有一个很棒的函数,它通过RFC1738(加上编码)对dict进行编码: 我找不到使用RFC 3986(百分比编码)的替代品,即使精细手册: RFC 3986-统一资源标识符Python RFC 3986的urlencode(),python,python-3.x,urlencode,Python,Python 3.x,Urlencode,Python有一个很棒的函数,它通过RFC1738(加上编码)对dict进行编码: 我找不到使用RFC 3986(百分比编码)的替代品,即使精细手册: RFC 3986-统一资源标识符 这是现行标准(STD66)。对urllib.parse模块的任何更改都应符合此要求 这将是预期的产出: >>> urllib.parse.urlencode({'site':'Stack Overflow','Coder':'Jeff Atwood'}) 'Coder=Jeff%20Atwood
这是现行标准(STD66)。对urllib.parse模块的任何更改都应符合此要求 这将是预期的产出:
>>> urllib.parse.urlencode({'site':'Stack Overflow','Coder':'Jeff Atwood'})
'Coder=Jeff%20Atwood&site=Stack%20Overflow'
当然,我可以自己动手,但我发现很奇怪,我没有发现内置这样的Python函数是否有我找不到的Python函数?似乎没有内置这样的函数,但有一个bug请求它,它甚至附带了一个补丁:对于字符串,您可以使用以下方法:
def percent_encoding(string):
result = ''
accepted = [c for c in 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~'.encode('utf-8')]
for char in string.encode('utf-8'):
result += chr(char) if char in accepted else '%{}'.format(hex(char)[2:]).upper()
return result
>>> percent_encoding('http://www.google.com')
'http%3A%2F%2Fwww.google.com'
>>> percent_encoding('ñapa')
'%C3%B1apa'
现在,对于字典,您需要对值进行编码,因此您只需要一个函数将字典转换为url键/值对,只对其值进行编码
def percent_urlencode(dictionary):
return '&'.join(["{}={}".format(k, percent_encoding(str(v))) for k, v in dictionary.items()])
>>> percent_urlencode({'token': '$%&/', 'username': 'me'})
'username=me&token=%24%25%26%2F'
>>> percent_urlencode({'site':'Stack Overflow','Coder':'Jeff Atwood'})
'site=Stack%20Overflow&Coder=Jeff%20Atwood'
我想你知道吗?我意识到这不是你想要的(不需要口述),但如果你需要自己做一部分,这是一个开始。@JohnZwinck:对,这将是“我自己滚”的重要组成部分。
def percent_urlencode(dictionary):
return '&'.join(["{}={}".format(k, percent_encoding(str(v))) for k, v in dictionary.items()])
>>> percent_urlencode({'token': '$%&/', 'username': 'me'})
'username=me&token=%24%25%26%2F'
>>> percent_urlencode({'site':'Stack Overflow','Coder':'Jeff Atwood'})
'site=Stack%20Overflow&Coder=Jeff%20Atwood'