2009-12-04 62 views
14

我有一個返回XML的API,它實際上使用默認編碼(我相信它是UTF-8)返回它,但現在需求已經改變,我們需要以UTF-16LE返回所有內容。更改HttpServletResponse的編碼

我的問題是:是否有一個簡單的方法來做到這一點?我可以在通話完成前獲得回覆,所以我想知道我是否可以做類似

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

非常感謝!

更新: 提到的方法是使用的方法。我使用的servlet API的舊版本(2.3)沒有包含它。更改版本修復了這一切。

回答

19

呃,確實存在的方法中,here

設置被髮送到 客戶端,例如,爲UTF-8的響應的字符編碼(MIME 字符集)。如果 字符編碼已經由 設置 setContentType(java.lang.String)或 setLocale(java.util.Locale),此 方法覆蓋它。與 調用 的setContentType(java.lang.String中)的text/html的字符串並調用 此方法的UTF-8 字符串相當於與主叫 的setContentType與 的text/html的字符串;字符集= UTF-8。

+2

。雖然這已經超過5年了,現在每個人都應該至少已經有了這個版本,但你也需要確保你也在使用它。 – BalusC 2009-12-04 19:21:54

+0

好點,做得好 – skaffman 2009-12-04 19:23:50

+2

這裏值得注意的是默認編碼是ISO-8859-1。 – 2014-01-07 21:58:02

8

首先

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

然後,確保你實際上發射該編碼!

10

正如其他人所指出的,請使用:

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

或:

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

...但要確保你調用response.getWriter之前做到這一點(); ...!

+3

謝謝,蒂姆,在'response.getWriter()'之後調用它是導致我們問題的原因! – 2015-12-21 03:33:35

+0

在response.getWriter()之前調用它的註釋本身應該是一個答案。 – Ickster 2018-03-09 19:20:16

0

只是做以下的事情:..這是Servlet API的2.4推出

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