Version: Python 2.7.3Python Requests Codierung POST-Daten
Andere Bibliotheken: Python-Requests 1.2.3, jinja2 (2,6)
Ich habe ein Skript, das Daten zu einem Forum einreicht und das Problem ist, diese nicht-ASCII-Zeichen erscheinen als Müll. Zum Beispiel erscheint ein Name wie André Téchiné als André Tékiné.
Hier ist, wie die Daten vorgelegt werden:
1) Daten zunächst von einer UTF-8 kodierten CSV-Datei wie so geladen sind:
entries = []
with codecs.open(filename, 'r', 'utf-8') as f:
for row in unicode_csv_reader(f.readlines()[1:]):
entries.append(dict(zip(csv_header, row)))
unicode_csv_reader von der Unterseite des Python CSV Dokumentation Seite lautet: http://docs.python.org/2/library/csv.html
Wenn ich den Namen der Einträge im Interpreter eingeben, sehe ich den Namen als u'Andr\xe9 T\xe9chin\xe9'
.
2) Als nächstes mache ich die Daten durch jinja2:
tpl = tpl_env.get_template(u'forumpost.html')
rendered = tpl.render(entries=entries)
Als ich den Namen in dem Interpreter gemacht geben sehe ich wieder das gleiches: u'Andr\xe9 T\xe9chin\xe9'
Nun, wenn ich die gerenderte Variable schreiben ein Dateiname wie folgt, zeigt es richtig:
with codecs.open('out.txt', 'a', 'utf-8') as f:
f.write(rendered)
Aber ich es an das Forum senden müssen:
3) Auf dem Anforderungscode POST ich habe:
params = {u'post': rendered}
headers = {u'content-type': u'application/x-www-form-urlencoded'}
session.post(posturl, data=params, headers=headers, cookies=session.cookies)
Sitzung ist eine Sitzung ersucht.
Und der Name wird im Forenbeitrag gebrochen angezeigt. Ich habe folgendes versucht:
- Lassen Sie heraus Header
- Encode als rendered.encode gemacht ('utf-8') (gleiches Ergebnis)
- gemacht = urllib.quote_plus (gerendert) (kommt als all% XY)
Wenn ich rendered.encode Typ ('utf-8') ich sehe die folgenden:
'Andr\xc3\xa9 T\xc3\xa9chin\xc3\xa9'
Wie konnte ich beheben das Problem? Vielen Dank.
„check das Problem nicht ein Display Artefakt dh, ist der Wert korrekt aber es wird falsch angezeigt "- Danke. Das ist das Problem! Leider ist es ein öffentliches Forum und ich kann die Standardcodierung nicht ändern. Es reagiert mit der iso-8859-1-Codierung. Kann ich gerenderten Code ('iso-8859-1') verwenden oder wird das die Dinge kaputt machen? Vielen Dank. – TheMagician
versuchen, Zeichensatz in den Headern – jfs
Das hat nicht funktioniert. – TheMagician