Ich versuche ein Formular zu senden, das UTF8-Zeichen enthält. Das Formular sieht folgendermaßen aus:
%Vor%Mein Server basiert auf dem Frühling. Meine web.xml hat bereits den Kodierungsfilter:
%Vor%Das Problem ist, dass die UTF-8-Zeichen irgendwo durcheinander geraten. Ich habe gerade am Anfang des Controllers einen Haltepunkt gesetzt, und die Charaktere sind an diesem Punkt selbst durcheinander. Wenn ich UTF8-Zeichen im Controller erzeuge, wird es im Browser korrekt gerendert. Nur beim Formularpost empfängt der Controller die Zeichen nicht richtig.
Irgendeine Idee, was ich falsch machen könnte?
Bearbeiten: Sieht so aus, als wären auf der neuen Seite Daten nicht durcheinander, sondern doppelt codiert. Ich kann nicht verstehen, warum es doppelt codiert ist.
Edit 2: Wenn ich das Formular anstelle von post ändern, funktioniert alles perfekt. Ich habe keine Ahnung, welcher Beitrag bricht.
Sieht so aus, als würden Browser den Zeichensatz nicht als Teil von Inhaltstyp in Anforderungsheadern senden (selbst wenn accept-charset auf Formular gesetzt ist) und Tomcat behandelt den Körper solcher Anfragen wie Latin-1 ( Ссылка ).
Zu einem späteren Zeitpunkt könnte dies als Latin-1 entschlüsselt und als UTF-8 codiert worden sein, was zu verzerrten Zeichen führt.
Das Verschieben von CharacterEncodingFilter nach oben und das Erzwingen der Codierung als UTF-8 löste das Problem.
Haben Sie in Ihrer web.xml einen Filter-Mapping-Eintrag für EncodingFilter?
%Vor%Ich würde vorschlagen, dass Sie den CharacterEncodingFilter entfernen, der selbst die Ursache der Doppelcodierung sein könnte.
Um die Situation zu debuggen, sollten Sie zuerst überprüfen, ob der Browser die Daten korrekt veröffentlicht. Verwenden Sie Firebug (für Firefox) oder Entwickler-Tools in Chrome (F12)
Wahrscheinlich liegt das Problem auf der Serverseite. Welchen Server benutzen Sie? Wenn Sie Tomcat verwenden, müssen Sie CharsetEncoding auf UTF-8 für das Connector-Element in server.xml festlegen
Update 1:
Es sieht sehr wahrscheinlich so aus, als ob das Problem das von Ihnen festgelegte forceEncoding ist. Wie in den Dokumenten
Dieser Filter kann seine Codierung anwenden, wenn die Anforderung dies nicht tut Geben Sie eine Codierung an oder erzwingen Sie die Codierung dieses Filters in einer beliebigen Datei case ("forceEncoding"="true")
Wenn Sie get machen, ist keine Kodierung angegeben, daher ist es sinnvoll, dass es funktioniert.
Wenn Sie jedoch den POST ausführen, wird die Codierung bereits angewendet und dann (wie es scheint) aufgrund der forceEncoding = true
erneut angewendetTags und Links html spring utf-8 forms spring-mvc