Problema con caracteres pasados por la request

Tengo un problema con la visualización de palabras con acentos que es de mayor importancia que la visualización en sí porque afecta a la lógica de la aplicación también.
Trabajo con Struts, y en una jsp defino estos parámetros a enviar y posteriormente los
Envío de la siguiente manera:
...
<%
/* Establecemos los parámetros que necesitamos para las posibles solicitudes de venta de títulos o modificación de datos de empresa */
HashMap paramsVent = new HashMap();
HashMap paramsModif = new HashMap();
paramsVent.put("titulosVentaAnterioridad", notific.getTitVentAnterioridad());
paramsVent.put("nombre", notific.getOperacion().getNombre());
paramsVent.put("titulosFueraIntervalo", notific.getOperacion().getSaldoTitulosOperacion());
paramsModif.put("nombre", notific.getOperacion().getNombre());paramsModif.put("objetivo", notific.getEmpresa().getObjetivo());
paramsModif.put("stopPerdidas", notific.getEmpresa().getStopPerdidas());
paramsModif.put("riesgo", notific.getEmpresa().getRiesgo());
paramsModif.put("notificar", "true");
paramsModif.put("precioActual", notific.getPrecActual());
pageContext.setAttribute("parametrosVender", paramsVent);
pageContext.setAttribute("parametrosModificar", paramsModif);
%>
......
<td width="14%" height="30">
<html:link action="solicitarVenderTitulosFueraIntervalo" name="parametrosVender">
<bean:message key="link.vender"/>
</html:link>
</td>
<td width="14%" height="30">
<html:link action="solicitarModificarDatosEmpresa" name="parametrosModificar">
<bean:message key="link.modificar"/>
</html:link>
</td>
..............
A través de esos links la jsp nos puede llevar a 2 páginas distintas. En una de ellas, otra jsp que tiene lógica algo compleja, tengo el siguiente código para obtener esos parámetros y a partir de ahí trabajar con ellos:
..........
<bean:parameter id="nmbr" name="nombre"/>
<bean:parameter id="objet" name="objetivo"/>
<bean:parameter id="stopPerd" name="stopPerdidas"/>
<bean:parameter id="riesg" name="riesgo"/>
<bean:parameter id="notif" name="notificar"/>
<bean:parameter id="precAct" name="precioActual"/>
...
Los parámetros son obtenidos correctamente, pero como a veces envío ciertas palabras con acentos, pues después trabajo con caracteres raros que motivan errores lógicos en
Sentencias como "if (x.equalsIgnoreCase(nmbr))", donde cuando debería haber coincidencia nunca la hay.
¿Qué modificaciones hago para no tener este problema?
Ah!, y ya tengo en las jsp's la codificación española <%@page pageEncoding="ISO-8859-1"%>
Creo que me he explicado bien

1 Respuesta

Respuesta
1
El problema lo puedes tener en la base de datos, no te fíes de como un gestor de base de datos almacena un carácter y como lo ves tu en un programa.
Si los datos los estás metiendo directamente o leyendo de un fichero, no deberías tener ningún problema. Puedes intentar codificarlo todo en UNICODE
Hola! He probado a cambiar <%@page pageEncoding="ISO-8859-1"%> por <%@page pageEncoding="UTF-8"%> en todas las jsp's de la aplicación y sigo teniendo el mismo problema. Y de hecho, si tengo puesto la línea con "ISO-8859-1" en las jsp's es porque me lo sugirieron para solucionar un problema que tenía con las ñ's, cosa que conseguí.
Sobre la base de datos, sí que me he fijado que visualizando las tuplas en modo consola los caracteres acentuados no se muestran correctamente, pero no he tenido ningún problema con ello. Los datos que recupero después se visualizan correctamente. No le doy importancia a cómo queden almacenadas las palabras acentuadas en la base de datos si yo almaceno en ella, por ejemplo, "único", y al recuperar esa palabra se visualiza también "único". He hecho pruebas y no he notado ningún problema.
El problema que tengo no tiene que ver con la base de datos. Está en que yo quiero enviar "acción.do?único" y me envía "acción.do?xxnico" (con xx dos caracteres raros), por lo que al recuperar el parámetro en la jsp y guardarlo en la variable correspondiente tengo "xxnico" y la cosa no funciona. ¿Me entiendes?
Saludos
Pues por eso te decía que lo codifiques en UNICODE, es decir, hay una clase que tiene los métodos uuencode y uudecode que te permiten transfirmar los caracteres problemáticos en código unicode, puedes hacer las peticiones pasando estos caracteres a código y no tendrás mayores problemas
Bueno!, pues resuelto!
Para enviar los valores, donde antes tenía
params.put("nombre", nmbr);
ahora tengo
params.put("nombre", URLEncoder.encode(nmbr, "ISO-8859-1"));
Y para recoger esos valores, donde antes tenía
<bean:parameter id="nmbr" name="nombre"/>
ahora tengo 
<bean:parameter id="nombre" name="nombre"/>
<bean:define id="nmbr" value="<%= java.net.URLDecoder.decode(nombre, "ISO-8859-1") %>" type="String"/>
Al principio no sabía muy bien lo que me querías decir, pero he buscado información sobre encode y decode y he dado con ello. En la base de datos siguen sin visualizarse correctamente esos caracteres, cosa que no me preocupa porque los recupero bien, y las jsp's sigo manteniéndolas con ISO-8859-1. He hecho pruebas y todo se visualiza ok
Gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas