2009-12-04 9 views
14

Ho un'API che restituisce XML, in realtà la restituisce utilizzando la codifica predefinita (credo sia UTF-8), ma ora i requisiti sono cambiati e dobbiamo restituire tutto in UTF-16LE.Cambia codifica di HttpServletResponse

La mia domanda è: c'è un modo semplice per farlo? Ho accesso alla risposta poco prima che le chiamate completo quindi mi chiedevo se potevo fare qualcosa di simile

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

Grazie mille!

AGGIORNAMENTO: Il metodo indicato è quello da utilizzare. Stavo usando una vecchia versione (2.3) dell'API del servlet che non lo includeva. Cambiando la versione è stato risolto tutto.

risposta

19

Uhh, il metodo fa esiste, here

Imposta la codifica dei caratteri (MIME charset) della risposta di essere inviato al client, per esempio, a UTF-8. Se la codifica dei caratteri è già impostata da setContentType (java.lang.String) o setLocale (java.util.Locale), questo metodo lo sostituisce con lo . Chiamata setContentType (java.lang.String) con la stringa di testo/html e chiamando questo metodo con la stringa di UTF-8 è equivalente a chiamare setContentType con la stringa di text/html; charset = UTF-8.

+2

..che introdotto in Servlet API 2.4. Anche se questo ha più di 5 anni e al giorno d'oggi tutti dovrebbero avere almeno quella versione, è necessario assicurarsi che lo si sta usando. – BalusC

+0

buon punto, ben fatto – skaffman

+2

Vale la pena notare qui che la codifica predefinita è ISO-8859-1. –

8

Prima

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

Quindi, assicurarsi che si sta effettivamente emettono che codifica!

10

Come altri hanno detto, utilizzare uno:

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

o:

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

... ma assicuratevi di fare questo prima di chiamare response.getWriter(); ...!

+3

Grazie, Tim, chiamandolo dopo 'response.getWriter()' è ciò che ci ha causato problemi! –

+0

Il commento sulla chiamata prima di 'response.getWriter()' dovrebbe essere una risposta in sé e per sé. – Ickster

0

solo fare la seguente cosa:

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(); 
Problemi correlati