更改HttpServletResponse的编码
我有一个返回XML的API,它实际上使用默认编码返回它(我相信它是UTF-8),但现在需求已经改变,我们需要返回UTF-16LE中的所有内容。
我的问题是:有一种简单的方法吗? 我可以在呼叫完成之前访问响应,所以我想知道我是否可以做类似的事情
//This method does not exist response.setCharacterEncoding("UTF-16LE");
非常感谢!
更新:提到的方法是使用的方法。 我使用的是不包含它的servlet API的旧版本(2.3)。 更改版本修复了所有问题。
呃,这个方法确实存在了
设置发送到客户端的响应的字符编码(MIME字符集),例如,设置为UTF-8。 如果字符编码已由setContentType(java.lang.String)或setLocale(java.util.Locale)设置,则此方法将覆盖它。 使用text / html的String调用setContentType(java.lang.String)并使用UTF-8的String调用此方法与调用带有text / html的String的setContentType相同; 字符集= UTF-8。
正如其他人所说,使用:
response.setCharacterEncoding("UTF-16LE");
要么:
response.setHeader("Content-Type", "text/xml; charset=UTF-16LE");
…但请确保在调用response.getWriter() 之前执行此操作; …!
第一
response.setHeader("Content-Type", "text/xml; charset=UTF-16LE");
然后,确保你实际上发出了那个编码!
只需做以下事情:
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();