在Python 3中使用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
有人可以解释发生的事情并暗示我如何获得理想的结果吗?
答案 0 :(得分:0)
我假设请求首先将unicode字符串编码为utf-8然后引用它们。
>>> urllib.quote(u'ö'.encode('utf-8'))
%C3%B6
答案 1 :(得分:0)
那是因为它是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'
答案 2 :(得分:0)
我没有任何进一步的导入声明我想出来了。我现在正在使用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"))