我的Servlet不会使用UTF-8作为JSON响应。为什么我的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());
}
}
但特殊字符显示不出来,当我检查,我在Firebug找回的头,我看到Content-Type: application/json;charset=ISO-8859-1
。
我在我的Servlet目录中做了一个grep -ri iso .
,结果什么都没有,所以我没有明确地将类型设置为ISO-8859-1。
我还应该指出,我在Eclipse中将Tomcat 7作为开发环境,使用Solaris 10以及任何他们称之为Web服务器环境(其他人管理此)作为生产环境运行此操作,和行为是一样的。
我也确认了提交的请求是UTF-8,只有响应是ISO-8859-1。
更新
我修改了代码,以反映我打电话的PrintWriter之前,我设置的字符编码。我从原来的例子中忽略了这一点,现在我意识到这是我的问题的根源。我读here,您必须先设置字符编码,然后再拨打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());
}
}
感谢您的“更新”,这正是我正在寻找的:首先设置字符编码,其次获取作家。 – 2014-06-16 17:16:10