2009-12-04 8 views
14

Ich habe eine API, die XML zurückgibt, gibt es tatsächlich mit der Standardcodierung (ich glaube, es ist UTF-8), aber jetzt Anforderungen haben sich geändert, und wir müssen alles in UTF-16LE zurückgeben.Ändern der Codierung von HttpServletResponse

Meine Frage ist: Gibt es eine einfache Möglichkeit, dies zu tun? Ich habe Zugriff auf die Antwort, kurz bevor die Anrufe komplett so dass ich mich gefragt, ob ich so etwas wie

//This method does not exist 
response.setCharacterEncoding("UTF-16LE"); 

Vielen Dank tun könnte!

UPDATE: Die genannte Methode ist die eine zu verwenden. Ich verwendete eine alte Version (2.3) der Servlet-API, die sie nicht enthielt. Durch die Änderung der Version wurde alles behoben.

Antwort

19

Uhh, wobei das Verfahren tut existieren, here

Stellt den Zeichencodierung (MIME charset) der Antwort auf den Client gesendet wird, beispielsweise auf UTF-8. Wenn hat die Zeichencodierung bereits durch setContentType (java.lang.String) oder setLocale (java.util.Locale), ist diese Methode überschreibt es gesetzt. Aufruf setContentType (java.lang.String) mit die Kette von text/html und diese Methode mit dem String von UTF-8 Aufruf ist äquivalent mit Aufruf setContentType mit der Zeichenfolge von text/html; Zeichensatz = UTF-8.

+2

..welche in Servlet API 2.4 eingeführt wird. Obwohl dies über 5 Jahre alt ist und heutzutage jeder mindestens diese Version haben sollte, müssen Sie sicherstellen, dass Sie es auch verwenden. – BalusC

+0

good point, well made – skaffman

+2

Es ist vielleicht erwähnenswert, dass die Standardcodierung ISO-8859-1 ist. –

8

Erste

response.setHeader("Content-Type", "text/xml; charset=UTF-16LE"); 

Dann stellen Sie sicher, dass Sie emittieren tatsächlich diese Codierung!

10

Wie andere gesagt haben, verwenden entweder:

response.setCharacterEncoding("UTF-16LE"); 

oder:

response.setHeader("Content-Type", "text/xml; charset=UTF-16LE"); 

... aber stellen Sie sicher, dass Sie dies tun vor response.getWriter Aufruf(); ...!

+3

Danke, Tim, nachdem wir 'response.getWriter()' aufgerufen haben, haben uns Probleme verursacht! –

+0

Der Kommentar zum Aufruf vor 'response.getWriter()' sollte eine Antwort sein. – Ickster

0

tun nur das Folgende:

byte[] k =xml.getBytes("UTF-16"); // xml is the string with unicode content. getBytes("UTF-16") encodes given String into a sequence of bytes and returns an array of bytes. you can use xml.getBytes(UTF8_CHARSET); for utf-8 encoding 

response.setContentType("text/xml"); 
response.setContentLength(k.length); 
response.getOutputStream().write(k); 
response.getOutputStream().flush(); 
response.getOutputStream().close(); 
Verwandte Themen