jsp tomcat encoding utf-8 jboss

La codificación de caracteres JSP se muestra mal en JSP pero no en la URL: "á» é »Ã ©"



tomcat encoding (10)

Creo que el problema podría ser que el navegador no especifique que la publicación del formulario sea utf-8. Hay mucho que leer sobre las publicaciones y codificaciones de formularios en la web, los marcos web múltiples proporcionan filtros de codificación de caracteres para "solucionar" este problema, tal vez como si tu idea para una solución fuera - ver por ejemplo http: //static.springframework. org / spring / docs / 2.5.x / api / org / springframework / web / filter / CharacterEncodingFilter.html

Tengo esta aplicación web en JSP ejecutándose en JBoss Application Server. Estoy usando Servlets para URLs amigables . Estoy enviando parámetros de búsqueda a través de mis JSP y Servlets. Estoy usando un formulario con un cuadro de texto, el servlet

El primer servlet usa request.getParameter() para obtener el texto y lo envía a otro servlet con response.sendRedirect (enmascarando la URL como algo "amigable"). Este Servlet final utiliza request.getRequestDispatcher().forward() para enviar los parámetros al JSP de la manera "fea": searchResults.jsp?searchParameters=Parameters .

Ahora, cuando se muestra la página Resultados de la búsqueda, la URL muestra el término de búsqueda correcto con "URL amigable". Ejemplo: http://site.com/search/My-Search-Query incluso cuando se usan caracteres especiales como: http://site.com/search/Busqué-tildes-y-eñies . Pero cuando trato de usar ese término de búsqueda en mi JSP, los caracteres especiales no se muestran correctamente.

Todo el sistema usa i18n, y hasta ahora no hemos tenido problemas con los caracteres especiales. Pero cuando la información se envía a través del formulario (digamos desde index.jsp a searchResults.jsp), los caracteres especiales no se muestran correctamente:

á - á
é - é
í - Ã
ó - ó
ú - ú
ñ - ñ

Se supone que toda la base de código está en UTF-8, pero aparentemente me falta algo cuando paso los parámetros. Como dije, se muestran correctamente en la URL, pero no dentro de la JSP.

Estaba pensando en convertirlos manualmente, pero creo que hay una forma mejor de hacerlo correctamente, usando la codificación correcta. Además, puede haber nuevos personajes más tarde, de los que quizás no tenga conocimiento ahora (francés, español, etc.)

Por las dudas, te haré saber que tengo estas líneas en cada JSP:

<?xml version="1.0" encoding="UTF-8" ?>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

EDITAR

Gracias por tus respuestas. Intenté algunas cosas, pero nada solucionó el problema.

Esto es lo que hice:

  • Agregué un ServletRequestListener que establece la codificación de caracteres de la sesión en UTF-8, y un filtro para cada solicitud de Http, que hace lo mismo.

  • Como dije, todo en los JSP está codificado con UTF-8 (consulte los encabezados en cuestión).

  • Imprimí la codificación de caracteres de los Servlets en la consola, que eran nulos por defecto, los configuré en UTF-8 como @kgiannakakis y @saua dijo.

Ninguna de estas acciones soluciona el problema. Me pregunto si hay algo más de malo en esto ...


El problema es que la información enviada por el navegador no tiene una codificación bien definida y no hay forma de que HTTP la especifique.

Afortunadamente, la mayoría de los navegadores usarán la codificación de la página que contiene el formulario. Entonces, si usa UTF-8 en todas sus páginas, la mayoría de los navegadores enviarán todos los datos en codificación UTF-8 también (y sus ejemplos muestran que así es exactamente como se envía).

Lamentablemente, los servidores de aplicaciones Java más comunes no manejan realmente el caso (no puedo culparlos, de todos modos es una gran cantidad de conjeturas).

Puede decirle a su servidor de aplicaciones que trate cualquier entrada como UTF-8, llamando

request.setCharacterEncoding("UTF-8");

En función de su estilo de codificación y de los marcos que utilice, podría ser demasiado tarde cuando el flujo de control llegue a su código, por lo que podría ser posible hacerlo en un javax.servlet.Filter .


En primer lugar, no tengo idea de cómo resolver esto, ya que no sé mucho sobre Java y JSP.

Habiendo dicho eso: los caracteres en el lado derecho de su tabla son la codificación UTF-8 del lado izquierdo. Es decir, en algún lugar de su código, está interpretando bytes como Latin-1 (o cualquiera que sea su codificación predeterminada), donde en realidad representan caracteres codificados en UTF-8 ...


Solo una conjetura salvaje. Pruebe esto dentro de su JSP / Servlet:

if(request.getCharacterEncoding() == null) { request.setCharacterEncoding("UTF-8"); }

Debe asegurarse de que la codificación correcta se transfiera a su servlet.


Verifique la configuración del conector en su configuración de tomcat. Existe una opción (URIEncoding) que puede configurar para tratar los URI como UTF-8. Por defecto, se tratan como ISO-8859-1.


Tuvimos un problema similar. Fue resuelto cuando todos los JSP se guardaron con la BOM UTF-8.


Intente configurar URIEncoding en {jboss.server} /deploy/jboss-web.deployer/server.xml.

Ex:

<Connector port="8080" address="${jboss.bind.address}" maxThreads="250" maxHttpHeaderSize="8192" emptySessionPath="true" protocol="HTTP/1.1" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8" />


¿Usas RequestDumper? Si está configurado en deploy / jboss-web.deployer / server.xml, intente eliminarlo y luego pruebe su codificación.


response.setCharacterEncoding ("UTF-8");


Hay tres capas para configurar. Según lo que describió, parece que su problema radica en la configuración de la base de datos.

  1. Visualización del navegador y presentación del formulario

JSP

<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>

HTML

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

  1. Procesamiento de servidor web

JSP

<% request.setCharacterEncoding("UTF-8"); String name = request.getParameter("NAME"); %>

El mismo tipo de cosas en un servlet. Vea la solución específica de JBoss así como la solución completa independiente del servidor en esta respuesta .

  1. Configuración de la base

Puede estar perdiendo la información del personaje en el nivel de la base de datos. Compruebe para asegurarse de que la codificación de su base de datos también sea UTF-8, y no ASCII.

Para obtener una explicación completa de este tema, consulte el artículo de Java Conversiones de caracteres del navegador a la base de datos .