3 Stimmen

Wie geht man mit der Kodierung von Abfrageparametern um?

Ich bin davon ausgegangen, dass alle Daten, die an meine Parameterstrings gesendet werden, utf-8 sein würden, da dies auf meiner gesamten Website verwendet wird. Und siehe da, ich habe mich geirrt.

Für dieses Beispiel hat das Zeichen ä in utf-8 im Dokument (aus dem Abfrage-String), sondern sendet eine B\xe4ule (entweder ISO-8859-1 oder Windows 1252), wenn Sie auf Senden klicken. Es wird auch eine Ajax-Anfrage die auch bei dem Versuch scheitert, das Nicht-utf8-Zeichen zu dekodieren.

An in django, meine request.POST ist wirklich vermasselt :

>>> print request.POST
<QueryDict: {u'alias': [u'eu.wowarmory.com/character-sheet.xml?r=Der Rat von Dalaran&cn=B\ufffde']}>

Wie kann ich all diese Kopfschmerzen einfach wegmachen und in utf8 arbeiten?

3voto

zgoda Punkte 12611

Seit Django 1.0 sind alle Werte, die Sie von der Formularübermittlung erhalten, Unicode-Objekte, keine Bytestrings wie in Django 0.96 und früher. Um utf-8 aus Ihren Werten zu erhalten, kodieren Sie sie mit utf-8 codec:

request.POST['somefield'].encode('utf-8')

Damit Abfrageparameter richtig dekodiert werden können, müssen sie zunächst richtig kodiert werden:

In [3]: urllib.quote('ä')
Out[3]: '%C3%A4'

Ich denke, Ihr Problem kommt von der schlechten Kodierung der Abfrageparameter.

1voto

six8 Punkte 2766

Sie sollten auch Folgendes hinzufügen accept-charset="UTF-8" zum <form/> Tag.

0voto

jarnbjo Punkte 33136

Obwohl es AFAIK nirgends angegeben ist, verwenden alle Browser die Zeichenkodierung der HTML-Seite, in die das Formular eingebettet ist, als Kodierung für die Übermittlung des Formulars an den Server. Wenn Sie also wollen, dass die URL-Parameter UTF-8-kodiert sind, müssen Sie sicherstellen, dass die HTML-Seite, in die das Formular eingebettet ist, ebenfalls UTF-8-kodiert ist.

0voto

Justin Grant Punkte 42760

Selon Nicht-UTF-8-Felder als UTF-8 in PHP erhalten? müssen Sie sicherstellen, dass die Seite selbst mit UTF8-Kodierung bereitgestellt wird.

0voto

Nuno Maltez Punkte 376

Um eine utf-8-Zeichenkette aus dem übermittelten Formular zu erhalten, muss lediglich die Kodierung der Unicode-Objekts:

next = request.POST['next'].encode('utf-8')

Können Sie für die AJAX-Anfrage bestätigen, dass diese Anfrage auch als utf-8 gesendet und in den Headern als utf-8 deklariert wird?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X