2009-12-04 12 views
14

Mam interfejs API, który zwraca kod XML, w rzeczywistości zwraca go przy użyciu domyślnego kodowania (uważam, że jest to kodowanie UTF-8), ale teraz wymagania uległy zmianie i musimy zwrócić wszystko w UTF-16LE.Zmień kodowanie HttpServletResponse

Moje pytanie brzmi: czy istnieje prosty sposób na zrobienie tego? Mam dostęp do odpowiedzi tylko przed wywołania kompletne więc zastanawiałem się, czy mogę zrobić coś takiego

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

Dzięki wielkie!

AKTUALIZACJA: Wymieniona metoda jest używana. Używałem starej wersji (2.3) API serwletu, która go nie zawierała. Zmiana wersji naprawiła to wszystko.

Odpowiedz

19

Uch metoda nie istnieje here

ustawienie znaku kodowania MIME ( zestawu znaków) odpowiedzi jest wysyłany do klienta, na przykład, na UTF-8. Jeśli kodowanie znaków jest już ustawione na setContentType (java.lang.String) lub setLocale (java.util.Locale), to metoda ta jest nadpisywana. Wywołanie setContentType (java.lang.String) z Ciąg text/html i nazywając ta metoda z ciągiem znaków UTF-8 jest równoznaczne z wywołaniem setContentType z Ciąg text/html; charset = UTF-8.

+2

..which jest wprowadzany w Servlet API 2.4. Chociaż jest to już ponad 5 lat, a teraz każdy powinien mieć już tę wersję, musisz się upewnić, że jej używasz. – BalusC

+0

dobry punkt, dobrze wykonany – skaffman

+2

Warto tutaj zauważyć, że domyślne kodowanie to ISO-8859-1. –

8

Pierwszy

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

Następnie upewnij się, że rzeczywiście emitujące to kodowanie!

10

Jak inni stwierdzili, należy albo:

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

czyli

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

... ale upewnij się, że ten zrobić przed wywołującego response.getWriter(); ...!

+3

Dzięki, Tim, wywołanie go po 'response.getWriter()' jest przyczyną problemów! –

+0

Komentarz dotyczący wywoływania go przed 'response.getWriter()' powinien być odpowiedzią samą w sobie. – Ickster

0

prostu zrobić następujące rzeczy:

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