Мой сервлет просто не будет использовать UTF-8 для ответов JSON.
MyServlet3318] MyServlet3318] :
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
.
Я выполнил grep -ri iso.
в моем каталоге сервлетов и ничего не придумал, так что нигде я явно не устанавливаю тип ISO-8859-1.
Я должен также укажите, что я запускаю это на Tomcat 7 в Eclipse с целью J2EE в качестве среды разработки, с Solaris 10 и тем, что они называют средой своего веб-сервера (кто-то другой администрирует это) в качестве производственной среды, и поведение такое же.
Я также подтвердил, что отправленный запрос - это 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());
}
}