2009-12-04 8 views
14

Tengo una API que devuelve XML, en realidad la devuelve utilizando la codificación predeterminada (creo que es UTF-8), pero ahora los requisitos han cambiado y tenemos que devolver todo en UTF-16LE.Cambiar la codificación de HttpServletResponse

Mi pregunta es: ¿hay una manera fácil de hacer esto? Tengo acceso a la respuesta justo antes de las llamadas completas así que me preguntaba si podía hacer algo como

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

Muchas gracias!

ACTUALIZACIÓN: El método mencionado es el que se debe utilizar. Estaba usando una versión anterior (2.3) de la API de servlet que no la incluía. Cambiar la versión lo solucionó todo.

Respuesta

19

Uhh, el método hace existen, here

Establece la codificación de caracteres (MIME charset) de la respuesta de ser enviado a el cliente, por ejemplo, a UTF-8. Si la codificación de caracteres ya ha sido establecido por setContentType (java.lang.String) o setLocale (java.util.Locale), este método redefine. Llamando setContentType (java.lang.String) con la cadena de texto/html y llamando este método con la cadena de UTF-8 es equivalente con llamar setContentType con la cadena de text/html; charset = UTF-8.

+2

..which se introduce en Servlet API 2.4. Aunque tiene más de 5 años y actualmente todos deberían tener al menos esa versión, debes asegurarte de que también la utilices. – BalusC

+0

buen punto, bien hecho – skaffman

+2

Vale la pena señalar aquí que la codificación predeterminada es ISO-8859-1. –

8

Primera

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

A continuación, asegúrese de que está realmente emitiendo esa codificación!

10

Como otros han dicho, utilice uno:

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

o:

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

... pero asegúrese de que hace esto antes de llamando response.getWriter(); ...!

+3

Gracias, Tim, llamándolo después de 'response.getWriter()' es lo que nos causó problemas. –

+0

El comentario sobre llamarlo antes de 'response.getWriter()' debería ser una respuesta en sí mismo. – Ickster

0

acaba de hacer lo siguiente:

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(); 
Cuestiones relacionadas