Jus*_*rce 12 java encoding json servlets http-headers
我的Servlet不会使用UTF-8进行JSON响应.
MyServlet.java:
public class MyServlet extends HttpServlet {
protected void doPost(HttpServletRequest req, HttpServletResponse res) throws Exception {
PrintWriter writer = res.getWriter();
res.setCharacterEncoding("UTF-8");
res.setContentType("application/json; charset=UTF-8");
writer.print(getSomeJson());
}
}
Run Code Online (Sandbox Code Playgroud)
但是特殊字符没有显示出来,当我查看我在Firebug中找回的标题时,我明白了Content-Type: application/json;charset=ISO-8859-1.
我grep -ri iso .在我的Servlet目录中做了一个,并且什么都没有,所以我没有明确地将类型设置为ISO-8859-1.
我还应该指定我在Eclipse中的Tomcat 7上以J2EE目标作为开发环境运行它,使用Solaris 10以及他们称之为Web服务器环境的任何人(其他人管理它)作为生产环境,行为是相同.
我还确认提交的请求是UTF-8,只有响应是ISO-8859-1.
我修改了代码以反映我在设置字符编码之前调用PrintWriter.我从原来的例子中省略了这一点,现在我意识到这是我问题的根源.我在这里读到你必须在调用之前设置字符编码HttpServletResponse.getWriter(),否则getWriter会为你设置它为ISO-8859-1.
这是我的问题.所以上面的例子应该调整为
public class MyServlet extends HttpServlet {
protected void doPost(HttpServletRequest req, HttpServletResponse res) throws Exception {
res.setCharacterEncoding("UTF-8");
res.setContentType("application/json");
PrintWriter writer = res.getWriter();
writer.print(getSomeJson());
}
}
Run Code Online (Sandbox Code Playgroud)
一旦为响应设置了编码,就无法更改。
强制使用 UTF-8 的最简单方法是创建自己的过滤器,它首先查看响应并设置编码。
看看Spring 3.0 是如何做到这一点的。即使你不能在你的项目中使用Spring,也许你也能得到一些灵感(确保你的公司政策允许你从开源许可证中得到灵感)。
| 归档时间: |
|
| 查看次数: |
9802 次 |
| 最近记录: |