Python Fordert die Codierung von POST-Daten an

Version: Python 2.7.3

Andere Bibliotheken: Python-Requests 1.2.3, jinja2 (2.6)

Ich habe ein Skript, das Daten an ein Forum sendet, und das Problem ist, dass Nicht-ASCII-Zeichen als Müll angezeigt werden. Zum Beispiel kommt ein Name wie André Téchiné als André Téchiné heraus.

So werden die Daten übermittelt:

1) Die Daten werden zunächst wie folgt aus einer UTF-8-codierten CSV-Datei geladen:

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 befindet sich unten auf der Python CSV-Dokumentationsseite:http://docs.python.org/2/library/csv.html

Wenn ich den Namen der Einträge in den Interpreter eingebe, sehe ich den Namen alsu'Andr\xe9 T\xe9chin\xe9'.

2) Als nächstes rendere ich die Daten über jinja2:

tpl = tpl_env.get_template(u'forumpost.html')
rendered = tpl.render(entries=entries)

Wenn ich den im Interpreter gerenderten Namen eingebe, sehe ich wieder dasselbe:u'Andr\xe9 T\xe9chin\xe9'

Wenn ich nun die gerenderte Variable in einen Dateinamen wie diesen schreibe, wird dies korrekt angezeigt:

with codecs.open('out.txt', 'a', 'utf-8') as f:
    f.write(rendered)

Aber ich muss es ins Forum schicken:

3) Im POST-Anforderungscode habe ich:

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 Anforderungssitzung.

Und der Name wird im Forumsbeitrag kaputt angezeigt. Ich habe Folgendes versucht:

Überschriften weglassenEncode wird als rendering.encode ('utf-8') gerendert (gleiches Ergebnis)rendering = urllib.quote_plus (gerendert) (wird als% XY ausgegeben)

Wenn ich rendering.encode ('utf-8') eingebe, sehe ich Folgendes:

'Andr\xc3\xa9 T\xc3\xa9chin\xc3\xa9'

Wie könnte ich das Problem beheben? Vielen Dank.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage