2016-12-08 4 views
0

Ich versuche, diese Art von URL wie folgt http://example.com/?param=%DD%CC%C0-15 mit requests Python-Erweiterung zu bekommen:Python (Requests) Codierung Probleme (UTF-8 - CP1251)

group = "ЭМА-15".encode('cp1251') 
r = requests.get('http://example.com/?param=' + group) 
r.encoding = "cp1251" 

(weil Website arbeitet mit Windows-1251 (CP1251) Kodierung)

Und bekommen errorat Zeile 2: UnicodeDecodeError: 'utf8' codec can't decode byte 0xdd in position 82: invalid continuation byte Aber diese Sequenz von Bytes (0xDD (% DD) ...) ist genau das, was ich brauche. Wie kann ich das beheben?

+1

Bitte haben eine meine Antwort suchen. –

Antwort

1

Es gibt zwei Dinge. 1. Python-Interpreter muss die Codierung von "ЭМА-15" string in der Quelle kennen 2. Abfrageparameter wird normalerweise von requests behandelt, aber da Sie die URL manuell erstellen, ist es am besten, es selbst zu zitieren.

# -*- coding: utf-8 -*- 
import urllib 
import requests 

group = u"ЭМА-15".encode('cp1251') 
param = urllib.quote_plus(group) 
print(param) 
r = requests.get('http://example.com/?param=' + param) 

Ausgabe

%DD%CC%C0-15 
+0

Ich warte auf eine solche Antwort. Danke vielmals. –

1

Ich glaube, Sie versuchen cp1251 Zeichen angezeigt werden, aber der Editor konfiguriert ist utf8 Die coding: cp1251 zu verwenden ist nur durch das Python-Interpreter verwendet, um Zeichen zu konvertieren von der Quelle Python-Dateien, die außerhalb des ASCII-Bereichs sind. Versuchen:

group = "ЭМА-15".decode('utf8').encode('cp1251') 
r = requests.get('http://example.com/?param=' + group) 
r.encoding = "cp1251" 

Wenn ich auf meinem Terminal laufen,

>>> "ЭМА-15".decode('utf8').encode('cp1251') 
'\xdd\xcc\xc0-15' 
+0

Nein, es druckt erfolgreich, das Problem ist in der Anfragefunktion –