Ich implementiere einen Dienst (als Rest), der eine POST-Methode empfängt.Stimmt es nicht, dass der Client den Zeichensatz im Feld "http-Inhaltstyp-Header" angeben muss?
Die Codierung in meinem System ist UTF-8.
Ich bin mit Jboss 5, in dem das Servlet, das die Anforderungen folgt die HTTP 1.1 Spezifikation von rfc2068, das besagt, erhält:
Wenn keine expliziten charset Parameter vom Sender zur Verfügung gestellt, Medien Subtypen vom Typ "Text" sind so definiert, dass sie bei Empfang über HTTP einen Standard-Zeichensatzwert von "ISO-8859-1" haben.
so, wenn der Client, dass mein Dienst aufruft wird beispielsweise UTF-8 verwenden und geben Sie ISO kein charset, und der Körper des POST enthält Zeichen außerhalb des US-ASCII, das Jboss Servlet geht davon aus "-8859-1 "und macht eine" falsche "Decodierung und in meinem System erhalte ich" gebrochene "Zeichen. Zum Beispiel anstelle der Zeichenfolge "día" erhalte ich "da".
Der Ansatz, den ich für "Schutz" mein System gefunden ist, den Kunden zu verlangen, die charset im content-type Parameter angeben. Wenn kein Zeichensatz angegeben wird, antworte ich mit einem http 403 und einem Text, der angibt, dass "der Zeichensatzwert angegeben werden muss".
Ist etwas falsch mit diesem Ansatz?
Was passiert, wenn der Client 'Content-Type sendet: text/plain; Zeichensatz = ISO-8859-1' mit 'UTF-8' Körper? –
@Luke Ich denke in diesem Fall müssen Sie einen defensiveren Ansatz als meiner nehmen. Vielleicht den Körper untersuchen. Sie können sich [diesen Beitrag] ansehen (https://stackoverflow.com/questions/499010/java-how-to-determine-the-correct-charset-encoding-of-a-stream). –