Мой сервлет просто не будет использовать 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
.
, я сделал 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());
}
}