我的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