java servlets character-encoding struts-1 konakart

java - request.getCharacterEncoding() devuelve NULL... ¿por qué?



servlets character-encoding (2)

request.getCharacterEncoding() basa en el atributo de solicitud Content-Type , no Accept-Charset

Entonces application/x-www-form-urlencoded;charset=IS08859_1 debería funcionar para la acción POST. La etiqueta de la <%@page no afecta los datos POST.

Un compañero de trabajo creó una forma básica de contacto con nosotros, que está alterando los caracteres acentuados (è, é, à, etc.). Estamos utilizando KonaKart, una plataforma de comercio electrónico de Java en Struts 1.

Reduje el problema a los datos que ingresan a través del objeto HttpServletRequest. Comparando un formulario similar (que funciona correctamente), noté que en el formulario anterior la Codificación de caracteres del objeto de request.getCharacterEncoding() ) se devuelve como "UTF-8", pero en el nuevo formulario vuelve como NULL, y el texto que sale de request.getParameter() ya está destrozado.

Aparte de eso, no he encontrado ninguna diferencia significativa entre la forma de bueno conocido y la forma nueva y rota.

Cosas que he descartado:

  • Ambas páginas HTML tienen la etiqueta: <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  • Ambas etiquetas de formulario en el HTML usan POST y no configuran codificaciones
  • Comprobando desde Firebug, tanto los encabezados de Solicitud y Respuesta tienen las mismas propiedades
  • Ambas páginas JSP usan los mismos atributos en la etiqueta <%@page contentType="text/html;charset=UTF-8" language="java" %> tag
  • No hay nada remotamente interesante en los archivos * Form.java, ambos heredan de BaseValidatorForm
  • Comprobé las codificaciones del archivo fuente, están todas configuradas en Predeterminado: heredado de Contenedor: UTF-8

Si los convierto de ISO-8859-1 a UTF-8, funciona muy bien, pero prefiero resolver el problema central. Por ejemplo: new String(request.getParameter("firstName").getBytes("ISO-8859-1"),"UTF8")

Cualquier sugerencia es bienvenida, ya no tengo ideas.


Los navegadores modernos generalmente no proporcionan la codificación de caracteres en el encabezado Content-Type solicitud HTTP. Sin embargo, en el caso de las aplicaciones basadas en formularios HTML, la misma codificación de caracteres que se especifica en el encabezado Content-Type de la respuesta HTTP inicial que sirve la página con el formulario. Necesita establecer explícitamente la codificación de caracteres de solicitud a la misma codificación usted mismo, que en este caso es UTF-8.

request.setCharacterEncoding("UTF-8");

Haga esto antes de que cualquier parámetro de solicitud se haya recuperado de la solicitud (de lo contrario, es demasiado tarde; la codificación predeterminada de la plataforma del servidor se usaría para analizar los parámetros, que a menudo es ISO-8859-1). Un filtro de servlet que está mapeado en /* es un lugar perfecto para esto.

Ver también: