Python请求函数:url格式化意外的ascii输出

时间:2016-07-25 15:15:38

标签: python python-requests

在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

有人可以解释发生的事情并暗示我如何获得理想的结果吗?

3 个答案:

答案 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"))