Mi servlet simplemente no usará UTF-8 para respuestas JSON.¿Por qué mi Servlet no responde a las solicitudes JSON en UTF-8?
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());
}
}
Pero caracteres especiales no aparecen, y cuando compruebo las cabeceras que estoy volver a estar en Firebug, veo Content-Type: application/json;charset=ISO-8859-1
.
Hice un grep -ri iso .
en mi directorio Servlet, y no se me ocurrió nada, por lo que en ninguna parte estoy estableciendo explícitamente el tipo a ISO-8859-1.
También debo especificar que estoy ejecutando esto en Tomcat 7 en Eclipse con un objetivo J2EE como entorno de desarrollo, con Solaris 10 y lo que ellos llaman su entorno de servidor web (alguien más administra esto) como entorno de producción, y el comportamiento es el mismo
También he confirmado que la solicitud enviada es UTF-8, y solo la respuesta es ISO-8859-1.
actualización
he modificado el código para reflejar que estoy llamando PrintStream antes de establecer la codificación de caracteres. Lo omití de mi ejemplo original, y ahora me doy cuenta de que este fue el origen de mi problema. Leí here que tiene que establecer la codificación de caracteres antes de llamar al HttpServletResponse.getWriter()
, o getWriter lo configurará en ISO-8859-1 para usted.
Este fue mi problema. Por lo tanto, el ejemplo anterior debe ajustarse a
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());
}
}
Gracias por su "Actualización", eso es exactamente lo que estoy buscando: Primero establecer la codificación de caracteres, Segundo obtener el escritor. –