2016-07-25 7 views
0

ich unerwartet ASCII-Zeichen immer bin, während die requests Bibliothek in Python 3.Python fordert Funktion: url Formatierung unerwartet ascii Ausgabe

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

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

Welche zurück:

http://www.domain.com/search?%C3%B6 
http://www.domain.com/search?%C3%A9 
http://www.domain.com/search?%C3%A4 

Obwohl ich erwartet hatte:

http://www.domain.com/search?%F6 
http://www.domain.com/search?%E9 
http://www.domain.com/search?%E4 

Kann jemand erklären, was passiert ist und mich anweisen, wie man das d gewünschte Ergebnisse?

+0

verwenden Sie Python 2 oder 3? –

+0

Ah, Entschuldigung. Python 3. Ich werde den Beitrag aktualisieren. –

Antwort

0

ich es dachte, ohne weitere Import-Anweisungen aus. Ich verwende jetzt die encode Methode.

Alter Code:

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

Neuer Code:

for i in search_terms: 
    r = requests.get(url, i.encode("iso-8859-1")) 
0

Ich nehme an, dass Anfragen zuerst die Unicode-Strings als utf-8 kodieren und sie dann zitieren.

>>> urllib.quote(u'ö'.encode('utf-8')) 
%C3%B6 
0

Das ist, weil es ist UTF-8 codiert.

>>> u'ö'.encode() 
b'\xc3\xb6' 
>>> u'é'.encode() 
b'\xc3\xa9' 
>>> u'ä'.encode() 
b'\xc3\xa4' 

Was Sie scheint, ist lateinische Codierung. Sie können es wie folgt erreichen:

# Python 3 
>>> from urllib.parse import quote 
>>> quote('ö', encoding='iso-8859-1') 
'%F6' 
+0

Ok. Ich sehe und habe es geschafft, die "Zitat" -Funktion in meinen Code zu implementieren, thx. Aber es fällt irgendwie wie eine vermeidbare Problemumgehung. Wissen Sie, ob es möglich ist, die Codierung direkt mit Anfragen zu adressieren? –