更改HttpServletResponse的编码

时间:2009-12-04 19:14:22

标签: java encoding servlets character-encoding

我有一个返回XML的API,它实际上使用默认编码返回它(我相信它是UTF-8),但现在需求已经改变,我们需要以UTF-16LE返回所有内容。

我的问题是:有一种简单的方法吗?我可以在调用完成之前访问响应,所以我想知道是否可以执行类似

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

非常感谢!

更新: 提到的方法是使用的方法。我使用的是不包含它的servlet API的旧版本(2.3)。更改版本修复了所有内容。

5 个答案:

答案 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);
}