Frage

Was ist die Standard-Kodierung eines zu dekodieren multipart / form-data verwenden sollte, wenn kein charset gegeben ist? RFC2388 heißt es:

  

4,5 Charset von Text in Formulardaten

     

Jeder Teil eines multipart / form-data soll eine inhalts- haben     Art. In dem Fall, in dem ein Feldelement ist ein Text, der charset     Parameter für den Text gibt das Zeichen verwendet Codierung.

     

Zum Beispiel kann ein Formular mit einem Textfeld, in dem ein Benutzer eingegeben ‚Joe schuldet      100' , wo wird das Euro-Symbol könnte Formulardaten zurückgekehrt     wie:

--AaB03x
content-disposition: form-data; name="field1"
content-type: text/plain;charset=windows-1250
content-transfer-encoding: quoted-printable>>

Joe owes =80100.
--AaB03x

In meinem Fall ist das charset nicht gesetzt, und ich weiß nicht, wie die Daten innerhalb dieser text / plain Abschnitt zu entschlüsseln. Da will ich nicht, etwas erzwingen, die nicht Standard-Verhalten Ich frage, was das erwartete Verhalten in diesem Fall ist. Die RFC scheint nicht, dies zu erklären, damit ich bin irgendwie verloren.

Danke!

War es hilfreich?

Lösung

Das Standard-charset für HTTP 1.1 ist ISO-8859-1 (Latin1), ich würde vermuten, dass dies auch hier gilt.

  

3.7.1 Kanonisierung und Text Defaults

- schnipp -

  

Die „Zeichensatz“ Parameter werden mit einigen Medientypen verwendet, um den Zeichensatz (Abschnitt 3.4) der Daten zu definieren. Wenn keine expliziten charset Parameter vom Sender zur Verfügung gestellt wird, werden Medien-Subtypen des „Text“ Typs mit einem Standard-charset Wert von „ISO-8859-1“, wenn sie über HTTP empfangen haben. Daten in anderen Zeichensätzen als „ISO-8859-1“ oder seine Teilmengen muss mit einem geeigneten charset Wert markiert werden. Siehe Abschnitt 3.4.1 für Kompatibilitätsprobleme.

Andere Tipps

Das hat offenbar geändert in HTML5 (siehe http: //dev.w3.org/html5/spec-preview/constraints.html#multipart-form-data ).

  

Die Teile der generierten multipart / form-data-Ressource, die entspricht nicht-Datei Felder keinen Content-Type-Header angegeben hat.

Also, wo ist der Zeichensatz angegeben? Soweit ich von dem Verschlüsselungsalgorithmus sagen kann, ist der einzige Ort in einem Formular Datensatz Eintrag mit dem Namen _charset _ .

Wenn Sie Ihr Formular nicht über einen versteckten Eingang namens _charset _ , was passiert? Ich habe diese 28 in Chrome getestet, ein Formular in UTF-8 codiert Senden und einem in ISO-8859-1 und die gesendeten Header und Nutzlast Inspektion, und ich weiß nicht charset gegeben überall (auch wenn der Text kodiert, auf jeden Fall Änderungen sehen ). Wenn ich bin ein leeres _charset _ Feld in der Form, Chrome bevölkern, dass mit dem richtigen Zeichensatz-Typ. Ich denke, jeder serverseitigen Code für das aussehen muss _charset _ Feld, es herauszufinden?

ich in dieses Problem lief, während eine Chrome-Erweiterung zu schreiben, dass Anwendungen XMLHttpRequest.send ein Formdata Objekt, das a href = " immer in UTF-8, egal was das Quelldokument Codierung codiert wird.

  

Lassen Sie die Anforderung Entitätskörper das Ergebnis der Ausführung des Multipart / Form-Daten Codieralgorithmus mit Daten als Formulardatensatz und mit UTF-8 als expliziter Zeichencodierung.

     

Let MIME-Typ der Verkettung sein "multipart / Form-Daten;", ein U + 0020 Leerzeichen, "boundary =" und die multipart / form-data Begrenzungszeichenfolge, die durch die Multipart / Form-Daten-Algorithmus codiert, .

Wie ich bereits gefunden, charset = utf-8 ist nicht überall auf der POST-Anfrage angegeben, es sei denn Sie eine leere _charset _ Feld in der Form enthalten, die in diesem Fall wird automatisch mit "bevölkert erhalten utf-8" .

Das ist mein Verständnis über den Stand der Dinge. Ich begrüße alle Korrekturen an meine Annahmen!

Dank der detaillierten Erklärung von @owlman.

Nur ein paar mehr Infos hier:

Upload Anfrage-Payload-Fragment:

------WebKitFormBoundarydZAwJIasnBbGaUqM
Content-Disposition: form-data; name="file"; filename="xxx.txt"
Content-Type: text/plain

Wenn "xxx.txt" hat einige UNICODE char darin UTF-8-Codierung, Harz (Stand 4.0.40) kann sie nicht richtig dekodieren, aber Anlegestelle (9.x) ist.

Ich denke, der Grund für die Harz-Verhalten ist, dass der Content-type keine Kodierung angegeben ist, so Harz dekodieren Dateiname „ISO8859-1“ verwendet, die in verstümmelte Zeichen führen kann.

Ich habe einige googeln:

https : //mail-archives.apache.org/mod_mbox/struts-user/200310.mbox/%3C3FA0395B.1080209@kumachan.net.nz%3E

Es scheint, dass Harz Verhalten ist nach Servlet Spec 2.3

Und ich kann keine Einstellungen finden von http://www.caucho.com /resin-4.0/reference.xtp die dieses Verhalten für Harz ändern können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top