为什么我的 Servlet 不能响应 UTF-8 中的 JSON 请求?更新
2022-09-04 23:06:45
我的 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目录中做了一个,但什么也没得到,所以我没有一个地方明确地将类型设置为ISO-8859-1。grep -ri iso .
我还应该指定我在 Eclipse 中的 Tomcat 7 上运行此内容,其 J2EE 目标作为开发环境,Solaris 10 和他们称之为 Web 服务器环境的任何内容(其他人管理此环境)作为生产环境,并且行为是相同的。
我还确认提交的请求是 UTF-8,只有响应是 ISO-8859-1。
更新
我已经修改了代码,以反映在设置字符编码之前我正在调用PrintWriter。我从原来的例子中省略了这一点,现在我意识到这是我问题的根源。我在这里读到,在调用之前必须设置字符编码,否则getWriter将为您将其设置为ISO-8859-1。HttpServletResponse.getWriter()
这是我的问题。所以上面的例子应该调整为
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());
}
}