2016-07-25 32 views
0

我同時使用requests庫在Python 3Python的請求功能:網址格式意外ASCII輸出

search_terms = ["ö", "é", "ä"] 
url = "http://www.domain.com/search" 

for i in search_terms: 
    r = requests.get(url, i) 

它返回了意外的ASCII字符:

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 

有人可以解釋發生了什麼,並提示我如何獲得d預期的結果?

+0

你使用Python 2或3? –

+0

啊,對不起。 Python 3.我會更新這篇文章。 –

回答

0

我想通了沒有任何進一步的import語句。我現在使用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")) 
0

我假設請求首先將unicode字符串編碼爲utf-8,然後引用它們。

>>> urllib.quote(u'ö'.encode('utf-8')) 
%C3%B6 
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' 
+0

好的。我看到並設法在我的代碼中實現'quote'函數,thx。但它有點像可避免的解決方法。你知道是否可以直接用'requests'來解決編碼問題嗎? –