Foros del Web » Programación para mayores de 30 ;) » Java »

encodig JSP, UTF-8, ISO-8859-1

Estas en el tema de encodig JSP, UTF-8, ISO-8859-1 en el foro de Java en Foros del Web. Hola! Estoy apurando los ultimos coletazos de mi aplicacion Web, y acabo de ver que si introduzco valores especiales (acentos, ñ..) en los formularios de ...
  #1 (permalink)  
Antiguo 21/08/2011, 13:39
 
Fecha de Ingreso: marzo-2009
Ubicación: Salamanca, España
Mensajes: 141
Antigüedad: 15 años, 8 meses
Puntos: 4
encodig JSP, UTF-8, ISO-8859-1

Hola!

Estoy apurando los ultimos coletazos de mi aplicacion Web, y acabo de ver que si introduzco valores especiales (acentos, ñ..) en los formularios de entrada, el action de struts2 no es capaz de recogerlos.

Por el contrario, si en la BBDD hago yo una insercion manual de un registro con caracteres especiales al mostrar ese registro en mi aplicacion me lo muestra correctamente, con tiles y ñ.

Es decir tengo errores en la entrada de datos, pero la salida funciona bien.

He intentado con estos dos tipos a ver si solucionaba lo de la entrada de datos

Código PHP:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    
pageEncoding="ISO-8859-1"%>

<!
DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<
html>

<
head>
    <
meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
</
head


Código PHP:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    
pageEncoding="UTF-8"%>

<!
DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<
html>

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

Q hago¿?
__________________
Puedes seguirme en Twitter: @fcojose2001
  #2 (permalink)  
Antiguo 21/08/2011, 16:49
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 4 meses
Puntos: 416
Respuesta: encodig JSP, UTF-8, ISO-8859-1

No basta con cambiar la codificacion de tu JSP o HTML, tienes tambien que cambiar el charset de tu archivo.
Muchos editores permiten cambiar el charset, por ejemplo con Notepad++ esta en el menu de Formato.
  #3 (permalink)  
Antiguo 21/08/2011, 18:15
 
Fecha de Ingreso: marzo-2009
Ubicación: Salamanca, España
Mensajes: 141
Antigüedad: 15 años, 8 meses
Puntos: 4
Respuesta: encodig JSP, UTF-8, ISO-8859-1

Hola ronruby.

No termino de entender lo que me has comentado. No es suficiente con cambiar ese charset que tengo en la cabecera de la JSP?

Trabajo con eclipse, puedo hacerlo desde este IDE?
__________________
Puedes seguirme en Twitter: @fcojose2001
  #4 (permalink)  
Antiguo 21/08/2011, 20:18
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 4 meses
Puntos: 416
Respuesta: encodig JSP, UTF-8, ISO-8859-1

Cita:
Iniciado por fcojose2001 Ver Mensaje
Hola ronruby.

No termino de entender lo que me has comentado. No es suficiente con cambiar ese charset que tengo en la cabecera de la JSP?

Trabajo con eclipse, puedo hacerlo desde este IDE?
El archivo tambien tiene que tener la codificacion que deseas.

En Eclipse, ve al menu Edit, elige la ultima opcion Set Encoding, elige el 2do radiobutton que dice Other y luego elige UTF-8.
  #5 (permalink)  
Antiguo 22/08/2011, 03:59
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 6 meses
Puntos: 306
Respuesta: encodig JSP, UTF-8, ISO-8859-1

Te has encontrado con el monstruo de la codificación.

Ten cuenta que hay que controlar el encoding en la web, en el servidor y en la BBDD.

En el caso del tomcat tienes que configurar el context para que por GET coja bien los parámetros con caracteres UTF-8.

Para POST había que hacer otros cambios que ahora no recuerdo

http://stackoverflow.com/questions/1...n-java-webapps
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #6 (permalink)  
Antiguo 22/08/2011, 06:16
 
Fecha de Ingreso: marzo-2009
Ubicación: Salamanca, España
Mensajes: 141
Antigüedad: 15 años, 8 meses
Puntos: 4
Respuesta: encodig JSP, UTF-8, ISO-8859-1

Wenas Xerelo!

En la BBDD y en las JSP acabo de comprobar y esta configurado para UTF-8. Entonces supongo que el problema puede venir de el servidor Tomcat. en un ratito echo un vistazo y os cuento que sale xD

Un Saludo
__________________
Puedes seguirme en Twitter: @fcojose2001
  #7 (permalink)  
Antiguo 24/08/2011, 19:20
 
Fecha de Ingreso: marzo-2009
Ubicación: Salamanca, España
Mensajes: 141
Antigüedad: 15 años, 8 meses
Puntos: 4
Respuesta: encodig JSP, UTF-8, ISO-8859-1

Buenas! Finalmente y tras revisar todo el codigo, comprobé que tenia un batipurrillo de tipos de encoding, finalmente pasé todo a UTF-8, BBDD, JSP, struts.xml, tiles.xml y web.xml.

Ahora todo funciona correctamente.

PD: El Tomcat no lo he tocado.

Grax por la ayuda.

Un saludo
__________________
Puedes seguirme en Twitter: @fcojose2001
  #8 (permalink)  
Antiguo 04/09/2011, 17:05
 
Fecha de Ingreso: marzo-2009
Ubicación: Salamanca, España
Mensajes: 141
Antigüedad: 15 años, 8 meses
Puntos: 4
Respuesta: encodig JSP, UTF-8, ISO-8859-1

Como bien dice el refran, no es oro todo lo que reluce,jeje. Ha aparecido un fallo en el encoding.

Hay una parte de la aplicacion en la que paso por metodo GET un nombre propio de una lista que se muestra por pantalla. Si este nombre tiene tildes o caracteres especiales surgen problemas.

Por ejemplo,si paso por GET el nombre maría, en la barra de direcciones veo el nombre escrito correctamente,con tilde. Pero al recoger el valor lo almacena mal ,no reconoce la tilde y si lo muesrto salen cosas raras

Solo aparecen problemas al recoger parametros de la barra de direcciones, en el resto de la aplicacion todas las tildes y Ñ se almacenan y se muestran correctamente.

Por si no ha quedado claro, con codigo xDD:

Tengo algo asi, una lista con varios nombres y un enlace para cada uno de ellos. En este caso la variable nombre contiene maría

Código PHP:
<a href="buscarPacienteCita.action?nombre=${nombre}"Añadir Sesion </a
Al pinchar sobre el link, aparece lo siguiente en la barra de direcciones:

Código PHP:
http://localhost:8080/2PFCRuvier/buscarPacienteCita.action?nombre=maría 
Al recoger el campo nombre es cuando salen cosas raras.

Lo curioso es que si copio la barra de direcciones y la pego aqui, queda distinto:

Código PHP:
http://localhost:8080/2PFCRuvier/buscarPacienteCita.action?nombre=mar%C3%ADa 
Q puedo hacer?
__________________
Puedes seguirme en Twitter: @fcojose2001

Última edición por fcojose2001; 04/09/2011 a las 19:00
  #9 (permalink)  
Antiguo 10/09/2011, 06:48
 
Fecha de Ingreso: febrero-2008
Ubicación: Sevilla
Mensajes: 91
Antigüedad: 16 años, 9 meses
Puntos: 15
Respuesta: encodig JSP, UTF-8, ISO-8859-1

Se debe a URI, que hace encoding en UTF-8 y el tomcat al hacer el decoding lo trata com ISO por defecto.

Debes cambiar el URIEncoding en el connector del server.xml, ademas de otras cosas, como un filtro UTF-8 por donde pasen todos los request al servidor.

Hace poco que nos paso en la empresa (fallo de diseño inicial del proyecto, planteado en ISO, comedero de cabeza 6 meses despues), y lo solucione siguiendo este articulo:

http://www.adictosaltrabajo.com/tuto...ina=tomcatUTF8

Si tienes alguna duda pregunta, un saludo!
  #10 (permalink)  
Antiguo 10/09/2011, 09:32
 
Fecha de Ingreso: marzo-2009
Ubicación: Salamanca, España
Mensajes: 141
Antigüedad: 15 años, 8 meses
Puntos: 4
Respuesta: encodig JSP, UTF-8, ISO-8859-1

Grax por responder javiDP, me imaginaba que el problema tenia q venir del lado del Tomcat, voy a aplicar lo que dice el articulo a ver si se soluciona.

Al rato te comento

Un saludo
__________________
Puedes seguirme en Twitter: @fcojose2001
  #11 (permalink)  
Antiguo 11/09/2011, 09:15
 
Fecha de Ingreso: marzo-2009
Ubicación: Salamanca, España
Mensajes: 141
Antigüedad: 15 años, 8 meses
Puntos: 4
Respuesta: encodig JSP, UTF-8, ISO-8859-1

nada, he seguido todos los pasos y me sigue mostrando mal las tildes cuando coge la variable de la barra de direcciones, lo que me extraña es q en la barra aparece con la tilde.

No deberia salir ya codificada en la barra de direcciones??
__________________
Puedes seguirme en Twitter: @fcojose2001
  #12 (permalink)  
Antiguo 12/09/2011, 07:03
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 6 meses
Puntos: 306
Respuesta: encodig JSP, UTF-8, ISO-8859-1

Del enlace que te puse

Cita:
The key part being URIEncoding="UTF-8" in the above example. This quarantees that Tomcat handles all incoming GET parameters as UTF-8 encoded. As a result, when the user writes the following to the address bar of the browser:

https://localhost:8443/ID/Users?action=search&name=*ж*
the character ж is handled as UTF-8 and is encoded to (usually by the browser before even getting to the server) as %D0%B6.
El comportamiento esperado es que te lo traduzca a UTF-8, incluso escribiendo en la barra de direcciones.

Prueba con otro navegador, puede ser por alguna configuración del navegador, pero ten en cuenta que introducir los parámetros directamente en la url no es un comportamiento deseable.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #13 (permalink)  
Antiguo 20/09/2011, 15:12
 
Fecha de Ingreso: febrero-2008
Ubicación: Sevilla
Mensajes: 91
Antigüedad: 16 años, 9 meses
Puntos: 15
Respuesta: encodig JSP, UTF-8, ISO-8859-1

Cita:
nada, he seguido todos los pasos y me sigue mostrando mal las tildes cuando coge la variable de la barra de direcciones, lo que me extraña es q en la barra aparece con la tilde.

No deberia salir ya codificada en la barra de direcciones??

La URL que aparece en la barra del navegador ya esta traducida de una URI, por lo tanto si es un caracter valido se mostrara en el navegador tal cual, pues este lo traduce antes de renderizar la pagina.

Seguro que te falta algun paso por realizar...mira sobre todo el filtro UTF-8, poniendo en debug el tomcat y un punto de ruptura en el return del tratamiento de la peticion(en el filtro), y mira en el request, en el parameterMap, si el parametro con el caracter especial esta bien o aparece un caracter raro en su lugar.

En el server.xml mira tambien que en el connector coyote tengas el URIEncoding...creo que ahi habia que colocarlo tambien, aunque no estoy seguro.

Y si usas eclipse ten cuidado con el, pues los cambios que realizas en el server.xml de la carpeta conf del tomcat no son los mismos que cuando usas tomcat desde eclipse (usa un server.xml propio para su contenedor en la carpeta metadata dentro del workspace, en la carpeta eclipse.wsdt.server.core).

Te aseguro que si se hace todo correcto, funciona.
  #14 (permalink)  
Antiguo 08/11/2011, 09:38
 
Fecha de Ingreso: noviembre-2011
Mensajes: 2
Antigüedad: 13 años
Puntos: 2
Sonrisa Respuesta: encodig JSP, UTF-8, ISO-8859-1

Para los que han pasado la odisea de la codificación con un aplicativo en struts 2, de tanto leer en diversos foros llegue a la configuración que me hizo posible mostrar los caracteres especiales en diferentes casos de usos,


1 Configuración del cliente

1. En la primera línea de cada JSP se debe indicar el encoding de la página a utilizar de manera que cuando se envía la petición por HTTP entre el cliente y el servidor, el navegador sepa en qué formato debe enviar los caracteres para que el servidor los procese correctamente.


Código PHP:
  <%@ page language="java" contentType="text/html; charset=UTF-8" ageEncoding="UTF-8"%> 
2 Configuración del Tomcat

2. En la parte del servidor también tenemos que especificar el encoding a utilizar. En Tomcat por defecto se especifica el formato de codificación ISO-8859-1. Para cambiar la codificación tenemos que modificar el archivo server.xml que se encuentra en DIRECTORIO_INSTALACION_TOMCAT\conf\server.xml.

Añadimos el atributo URIEncoding=“UTF-8” en la etiqueta <Connector port=”8080” … /> ya que es aquí donde se configura el comportamiento que sigue Tomcat cuando recibe peticiones a través del puerto 8080.

Código PHP:
<Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25"     maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100"     connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8"/> 

3. Podría ser necesario especificar al contenedor de servlets Catalina la codificación a utilizar indicándole en el arranque que los caracteres siempre van en UTF-8. Para ello editamos el fichero catalina.bat (Windows) o el catalina.sh (Linux) y añadimos lo siguiente:
Código PHP:
      (Windowsset CATALINA_OPTS=-Dfile.encoding="UTF-8"

    
(Linuxexport CATALINA_OPTS=-Dfile.encoding="UTF-8" 
A la vez indicamos las opciones del arranque de la JVM en UTF-8 por lo que añadimos al mismo fichero.
Código PHP:
      (Windowsset JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding="UTF-8"

    
(Linuxexport JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding="UTF-8" 
4.Configurar bien el manejador de base de datos para la cofdificación en micaso uso postgresql y laq crear la BD le especifica el ENCODING = 'UTF8' y como uso hibernate en el conector también habia que agregar
Código PHP:
<property name="hibernate.connection.charSet">UTF-8</property
en el hibernate.cfg.xml.


Todo bien pero hubo casos en el que al usar Struts2 con los formularios para guardar data en la bd ser perdian los caracteres especiales de las cadenas que se guardan en el valuestack por lo que tuve que definir en la cabecera del jsp lo siguiente:

Código PHP:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    
pageEncoding="ISO-8859-1"%> 
y eso me ayudo enormemente!!!!!

a la ves que al recuperar datos en una consulta a la base de datos y querer desplegarlos en una vista con

Código PHP:
<s:property value="funcion.nombre"/> 
o al guardar un dato en la sesión del valuestack,

Código PHP:
<s:property value="%{#session.usuario.nombre}"></s:property
o al enviar valore por get al recuperarlos en la otra vista con

Código PHP:
<s:property value="%{#parameters.nombre" /> 
no me trae nunca los acentos por lo que después de leer muchos foros conseguí una solución extraña pero eficaz, solo hay que agregar esto al archivo struts. Properties:

Código PHP:
 struts.i18n.encoding=ISO-8859-
Nota: se que las soluciones son muy chapuceras pero recien estoy iniciando en este mundo, hace dos mese que me gradué y en el trabajo me pusieron a hacer un UDDI, web service, y estoy aprendiendo a implementar un bus de servicios con service mix, son muchas tecnologías en tampoco tiempo, y pensar que en la uni solo me daban java hasta aplicativos de escritorios.

Ojala llegue un experto a este post y nos enseñe las practicas correctas en este tema.

estas son las paginas que me ayudaron a resolver entre muchas otras:

[URL="http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=tomcatUTF8"]http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=tomcatUTF8[/URL]

[URL="http://grupos.emagister.com/mensaje/estimados_desarrolladores_estuve_tratando_de/7273-2936104"]http://grupos.emagister.com/mensaje/estimados_desarrolladores_estuve_tratando_de/7273-2936104[/URL]

Etiquetas: iso-8859-1, jsp, jsp-servlets, utf-8, formulario, https
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 07:47.