我有一个返回XML的API,它实际上使用默认编码返回它(我相信它是UTF-8),但现在需求已经改变,我们需要以UTF-16LE返回所有内容。
我的问题是:有一种简单的方法吗?我可以在调用完成之前访问响应,所以我想知道是否可以执行类似
的操作//This method does not exist
response.setCharacterEncoding("UTF-16LE");
非常感谢!
更新: 提到的方法是使用的方法。我使用的是不包含它的servlet API的旧版本(2.3)。更改版本修复了所有内容。
答案 0 :(得分:20)
嗯,方法 存在,here
设置字符编码(MIME charset)发送的响应 例如,客户端是UTF-8。如果 字符编码已经存在 被设定 setContentType(java.lang.String)或 setLocale(java.util.Locale),这个 方法覆盖它。调用 setContentType(java.lang.String)with text / html和调用的字符串 这个方法使用UTF-8字符串 等同于召唤 setContentType,String为 为text / html;字符集= UTF-8。
答案 1 :(得分:14)
正如其他人所说,使用:
response.setCharacterEncoding("UTF-16LE");
或:
response.setHeader("Content-Type", "text/xml; charset=UTF-16LE");
...但请确保在调用response.getWriter()之前执行此操作 ...!
答案 2 :(得分:9)
第一
response.setHeader("Content-Type", "text/xml; charset=UTF-16LE");
然后,确保您实际上正在发出该编码!
答案 3 :(得分:0)
只需做以下事情:
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();
答案 4 :(得分:0)
我发现您必须将字符编码至少设置为UTF-8,因为默认值是ISO-8859-1。 ISO-8859-1字符集不包含某些扩展字符。我编写了一个辅助函数,以使用“ Accept”标头中发送的内容:
public static void setResponseCharacterSet(HttpServletRequest request, HttpServletResponse response)
{
String type = "UTF-8";
if(request.getHeader("accept") != null)
{
String[] params = request.getHeader("accept").split("charset=");
if(params.length == 2) {
type = params[1];
}
}
response.setCharacterEncoding(type);
}