Django POST Encoding-Problem

Django, Flask, Bottle, WSGI, CGI…
Antworten
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Hallo Forum,

ich werte in in einem Django View die Eingabe eines Formulars aus. Da die ganze Eingabe ein bisschen speziell sein muss konnte ich nicht auf django.forms zurück greifen.

Eigentlich tut das alles was es soll:

Code: Alles auswählen

def writemail(request):
    if request.method == "POST":
        maildata["text"] = request.POST["text"]
        _send_mail_to_smtp(mail_from=maildata["mail_from"],
                           mail_to=maildata["mail_to"],
                           subject=maildata["subject"],
                           text=maildata["text"])
Umlaute funktionieren, wilde Zeichen aus dem ASCII-Bereich gehen, aber wehe jemand schreibt ein €-Zeichen:

Code: Alles auswählen

'latin-1' codec can't encode character u'\u2190' in position 144: ordinal not in range(256)
, und zwar in der Zeile in der die Paramter an die Methode _send_mail_to_smtp übergeben werden.

Das ist so eine Situation die man mit 3 Buchstaben und einem Satzzeichen audrücken kann: Höh?

Gut, ich muss gerade unter Windows entwickeln und es ist im Testlauf aufgefallen. Ich weiß nicht ob das auf dem Webserver auch auftritt, der läuft mit Debian. Aber ich traue mich nicht das Live zu bringen solange das nicht will ;)


Gruß
Sebastian
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Also forms kannst du eigentlich für alle Zwecke anpassen.

Sendest du die Seite auch mit einem encoding? Evtl. hilft ein accept-charset="utf-8" um die Form Daten als UTF-8 zu bekommen, siehe auch: http://www.python-forum.de/viewtopic.ph ... 33#p220233 ff

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

jens hat geschrieben:Sendest du die Seite auch mit einem encoding? Evtl. hilft ein accept-charset="utf-8" um die Form Daten als UTF-8 zu bekommen
Die Daten in request.POST sind alle vom Typ unicode, reicht das nicht?
BlackJack

@sparrow: Wo tritt die Ausnahme denn nun *genau* auf? Traceback bitte. Was ist `maildata`? Kann es sein, dass das Problem gar nicht im gezeigten Quelltext auftritt sondern erst innerhalb von `_send_mail_to_smtp()`? Denn da müssen die Texte ja letztendlich irgendwie kodiert werden um sie in einer Mail versenden zu können. Wie werden sie dort kodiert?
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Argh.. danke BlackJack.

Problem gefunden. Vor lauter Wald die Bäume nicht gesehen.

Der Grund war, dass das Programm die "simplemail.py" statt der Django-internen Mail-Lösung verwendet hat. Sieht so aus als hat simplemail sich dabei irgendwie verschluckt.
Antworten