在Python3中使用requests库时,我得到了意想不到的ASCII字符。
search_terms = ["ö", "é", "ä"]
url = "http://www.domain.com/search"
for i in search_terms:
r = requests.get(url, i)返回:
http://www.domain.com/search?%C3%B6
http://www.domain.com/search?%C3%A9
http://www.domain.com/search?%C3%A4虽然我希望:
http://www.domain.com/search?%F6
http://www.domain.com/search?%E9
http://www.domain.com/search?%E4有人能解释一下发生了什么,并暗示我如何得到预期的结果吗?
发布于 2016-07-25 16:05:46
我算出来了,没有任何进一步的导入声明。我现在正在使用encode方法。
旧代码:
for i in search_terms:
r = requests.get(url, i)新代码:
for i in search_terms:
r = requests.get(url, i.encode("iso-8859-1"))发布于 2016-07-25 15:36:07
我假设请求首先将unicode字符串编码为utf-8,然后引用它们。
>>> urllib.quote(u'ö'.encode('utf-8'))
%C3%B6发布于 2016-07-25 15:39:02
那是因为它是UTF-8编码。
>>> u'ö'.encode()
b'\xc3\xb6'
>>> u'é'.encode()
b'\xc3\xa9'
>>> u'ä'.encode()
b'\xc3\xa4'你想要的似乎是拉丁文编码。你可以这样做到:
# Python 3
>>> from urllib.parse import quote
>>> quote('ö', encoding='iso-8859-1')
'%F6'https://stackoverflow.com/questions/38571534
复制相似问题