更改HttpServletResponse的编码

Pab*_*dez 18 java encoding servlets character-encoding

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

我的问题是:有一种简单的方法吗?我可以在呼叫完成之前访问响应,所以我想知道我是否可以做类似的事情

//This method does not exist
response.setCharacterEncoding("UTF-16LE");
Run Code Online (Sandbox Code Playgroud)

非常感谢!

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

ska*_*man 20

呃,该方法确实存在,在这里

设置发送到客户端的响应的字符编码(MIME字符集),例如,设置为UTF-8.如果字符编码已由setContentType(java.lang.String)或setLocale(java.util.Locale)设置,则此方法将覆盖它.使用string of text/html调用setContentType(java.lang.String)并使用UTF-8字符串调用此方法与调用setContentType并使用String of text/html相同; 字符集= UTF-8.

  • ..在Servlet API 2.4中引入.虽然这已经超过5年了,现在每个人都应该已经拥有至少那个版本,但你需要确保你也使用它. (2认同)
  • 这里值得注意的是默认编码是ISO-8859-1. (2认同)

Tim*_*per 14

正如其他人所说,使用:

response.setCharacterEncoding("UTF-16LE");
Run Code Online (Sandbox Code Playgroud)

要么:

response.setHeader("Content-Type", "text/xml; charset=UTF-16LE");
Run Code Online (Sandbox Code Playgroud)

...但请确保调用response.getWriter()之前执行此操作; ...!

  • 谢谢,蒂姆,在`response.getWriter()之后调用它是导致我们问题的原因! (3认同)

Jon*_*erg 9

第一

response.setHeader("Content-Type", "text/xml; charset=UTF-16LE");
Run Code Online (Sandbox Code Playgroud)

然后,确保你实际上发出了那个编码!