2016-07-31 16 views
1

Ich habe gelernt, dass Java im Allgemeinen UTF-16 als interne String-Darstellung verwendet.
Meine Frage ist, was tatsächlich passiert, wenn eine Antwort in Java komponiert wird und unterschiedliche Zeichencodierung angewendet wird, z. response.setCharacterEncoding("ISO-8859-1").Wie funktioniert Servlet HttpServletResponse :: setCharacterEncoding()?

Ist es konvertieren tatsächlich den Körper Bytes Antwort von UTF-16-ISO-8859-1 oder es kommt noch hinzu, einige Metadaten in das Antwortobjekt?

+1

Es würde helfen, wenn Sie genau sagen könnten, über welche Klasse Sie sprechen. –

+0

@BalusC können Sie bitte erklären, warum es nicht Java questoin? – itamar

+1

Dies ist eine Servlet-API-Frage, keine Java SE-API-Frage. Verwenden Sie das [java] -Tag nur für Fragen, die mit einer einfachen Java-Anwendungsklasse mit 'main()' - Methode und/oder mit JLS beantwortbar sind. – BalusC

Antwort

0

Ich gehe davon aus, dass Sie über eine Klasse sprechen, die entlang der Linien HttpServletResponse funktioniert. Wenn das der Fall ist, dann ja, es ändert sich der Körper der Antwort, wenn Sie getWriter aufrufen. Der Schreiber, der von diesem zurückgegeben wird, muss alle Zeichenfolgen, die in es geschrieben werden, in Byte konvertieren, und die Codierung wird für das verwandt.

Wenn Sie den Inhaltstyp festgelegt haben, stellt die Einstellung der Inhaltscodierung auch diese Informationen über den Header Content-Type zur Verfügung. Gemäß der ServletResponse docs:

Aufruf setContentType (java.lang.String) mit dem String von text/html und dem Aufruf dieser Methode mit dem String von UTF-8 entspricht mit setContentType mit dem String von text/html; charset=UTF-8 aufrufen.

+0

Was meinst du mit '** wenn ** du getWriter' nennst? – itamar

+0

@itamar: Nun, wenn Sie nur 'getOutputStream' aufrufen und darauf schreiben, beeinflusst die Kodierung nicht den Hauptteil der Antwort, nur die Header. –