He visto en varios forums que algunas personas se quejan de que cuando generan objetos en notación JavaScript (JSON) y que tienen caracteres del latín como los acentados (ñ, á, ü, etc) usando HttpServletResponse desde un servlet el browser les muestra caracteres extraños y preguntan por la solución.
La respuesta es sencilla. Antes de hacer el getWriter() del HttpServletResponse se debe setear el tipo de encoding que usarán para mapear los caracteres de forma que el browser los pueda interpretar y convertir de vuelta.
Hay dos formas de hacer esto:
1. Mediante el método setContentType(), que envía el tipo de contenido al cliente (browser) y donde puede setearse el charset.
response.setContentType("application/x-json;charset=UTF-8");
...
2. Mediante el método setCharacterEncoding(), que si es usado sobre-escribe la acción de setContentType().
response.setCharacterEncoding("UTF-8");
...
A continuación un ejemplo completo del envio de modelos de objetos en notación JavaScript hacia el browser desde un clase que hereda de org.springframework.web.servlet.view.AbstractView de Spring
...
protected void renderMergedOutputModel(Map model, HttpServletRequest req,
HttpServletResponse resp) throws Exception {
JSONObject json = (JSONObject) model.get("json");
resp.setCharacterEncoding("UTF-8");
if (null != json) {
resp.getWriter().write(json.toString());
} else {
resp.getWriter().write("{}");
}
}
…
Para mayor referencia, Tim Bray explica porque Unicode y UTF-8 son excelentes. Es una lectura obligatoria para entender de estos temas.





