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

Acentos y Ñ en Beans usando JSP

Estas en el tema de Acentos y Ñ en Beans usando JSP en el foro de Java en Foros del Web. Hola a todos he buscado mi problema en el foro y Google y aunque hay varias situaciones similares no encontré solución a mi problema. Tengo ...
  #1 (permalink)  
Antiguo 12/10/2009, 14:24
 
Fecha de Ingreso: septiembre-2008
Mensajes: 15
Antigüedad: 15 años, 7 meses
Puntos: 0
Acentos y Ñ en Beans usando JSP

Hola a todos he buscado mi problema en el foro y Google y aunque hay varias situaciones similares no encontré solución a mi problema.

Tengo unas páginas en JSP que son formularios de registro, esos formularios los tengo usando un bean de al siguiente forma:

<jsp:useBean id="cliente" scope="page" class="modelo.Cliente" />
<jsp:setProperty name="cliente" property="*" />

Me di cuenta que al ingresar en el formulario textos con acentos en la base de datos quedaban garabatos. He depurado el programa en Netbeans y logré encontrar que el error ocurría en el momento que la página JSP asignaba los valores al bean, en ese momento ya quedaban con los garabatos.

Estoy usando codificación UTF-8 en las páginas JSP, y metodo de envío POST. En Tomcat 6.

¿Que puedo hacer para que los textos se asignen correctamente en el bean?
  #2 (permalink)  
Antiguo 12/10/2009, 20:45
ssh
 
Fecha de Ingreso: agosto-2009
Mensajes: 85
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Acentos y Ñ en Beans usando JSP

Justamente el problema es la codificación q estás usando (UTF-8), tienes q usar una compatible con windows o el sistema en el q estés trabajando.
  #3 (permalink)  
Antiguo 13/10/2009, 01:42
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Acentos y Ñ en Beans usando JSP

Sería mejor que utilizase la codificación unicode.
  #4 (permalink)  
Antiguo 13/10/2009, 09:54
 
Fecha de Ingreso: septiembre-2008
Mensajes: 15
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Acentos y Ñ en Beans usando JSP

En este momento estoy usando Linux, pero como comprenderás es un sistema Web y la idea es que funcione en la mayor variedad de sistemas operativos y navegadores. Es por esta razón que he preferido usar Unicode con UTF-8.
  #5 (permalink)  
Antiguo 13/10/2009, 14:58
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Acentos y Ñ en Beans usando JSP

Hola,

Eso depende de algunas 'capas' que forman parte de todo el sistema, la primera 'capa' viene siendo el navegador (browser), hay que darle a saber el sistema la codificación que queremos usar.

Para indicarle al navegador, el archivo tiene que estar guardado en formato UTF-8, no solamente el encabezado meta; tienes que estar seguro que el archivo está guardado en formato UTF-8.

Después tienes que estar seguro que el encabezado meta incluye la codificación, <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">, así el navegador sabe como manejar la información (aún así, si el archivo NO está en formato UTF-8, algunos navegadores se pueden 'confundir').

Después le tienes que indicar al contenedor de aplicaciones JSP, que la página que está usando el navegador está en formato UTF con la directiva, <%@page pageEncoding="UTF-8"%>, no estoy seguro si es UTF-8 O UTF8 (En esta directiva si hay diferencia ¿?).

Después te tienes que asegurar que tu servidor está sirviendo los archivos como UTF-8, lo más sencillo es usar el mismo NetBeans para ver los HEADERS enviados, y ver si existe el header content/type: html... etc. (No es el meta, son headers, esto se envía antes del archivo).

También puedes usar otras herramientas como lwp-rdownload (Perl) o la librería Libwww (w3.org) con ciertos parámetros para que te muestre los headers.

Java es UTF, así que supuestamente, de allí en adelante no hay que hacer ninguna modificación extra, sino estas usando otro transporte más.

Después la base de datos, allí hay varias capas, el servidor debe estar en UTF-8, la base de datos debe estar en UTF-8, las tablas, los campos varchar deben estar en UTF-8, la conexión debes abrirla en UTF-8 (normalmente si el servidor está en UTF-8, las conexiones están en UTF-8), etc.

Saludos,

ps:

De allí viene tanta confusión con el UTF-8.
  #6 (permalink)  
Antiguo 13/10/2009, 15:13
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Acentos y Ñ en Beans usando JSP

Hola,

Cita:
Iniciado por ssh Ver Mensaje
Justamente el problema es la codificación q estás usando (UTF-8), tienes q usar una compatible con windows o el sistema en el q estés trabajando.
Esto es muy importante saberlo, NO importa el sistema operativo, ni los programas ni la base de datos, al final todo son bytes. Para mostrar la Ñ ... el sistema ISO (Windows-12XX) nativo de Windows (¿?) usa 1 byte, el sistema Unicode nativo de Unix (¿?) usa 2 bytes.

Si no configuras bien tus programas no van a funcionar bien el primero de 1 byte con el otro de 2 bytes y viceversa. Pero tanto Linux como Windows y otros sistemas operativos tienen todas (o casi todas) las codificaciones disponibles.

Solamente hay que saber configurarlas.

Saludos,
  #7 (permalink)  
Antiguo 13/10/2009, 15:38
 
Fecha de Ingreso: septiembre-2008
Mensajes: 15
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Acentos y Ñ en Beans usando JSP

Hola HackmanC, he revisado lo que me sugeriste y está todo tal cual tú lo dices.
Agregué el complemento Web Developer para firefox para ver las cabeceras de la pagina y efectivamente me aparece la cabecera:
"Content-Type: UTF-8;charset=UTF-8"

Ya está agregado el meta:
meta http-equiv="Content-Type" content="text/html; charset=UTF-8"

Y la directiva JSP:
%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%

Agregué a la etiqueta Form el parametro:
accept-charset="UTF-8"

Invoqué los métodos:
response.setContentType("UTF-8");
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");

Y en el archivo server.xml de Tomcat agregué:
Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"

Todo eso y sigo sin obtener resultados, en el bean se siguen guardando mal los textos con acentos.

Ahh y lo que me faltó decir es que me sucede tanto en Linux como en Windows, y con los navegadores Firefox e Internet Explorer.
  #8 (permalink)  
Antiguo 13/10/2009, 19:12
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Acentos y Ñ en Beans usando JSP

Hola,

Je, je ... se me olvidaron algunas partes, pero es bueno ver que buscastes mayor información, y eso me pasa a veces por escribir sin haber realizado algunas pruebas anteriormente,

Intenté hacer que mi configuración me mostrara los 2 bytes separados, pero no logré invertir el proceso, así que hice una nueva instalación de NetBeans 6.7.1 con Tomcat 6 y GlassFish; al final la única diferencia que encuentro es la siguiente, podrías hacer una prueba ... y si no te funciona de esta forma ... entonces posiblemente hay algo extra (y fuera de mi conocimiento) que hayas modificado en alguna lugar:

Código Java:
Ver original
  1. <&#37; request.setCharacterEncoding("UTF-8"); %>
  2.  
  3. <%@page contentType="text/html" pageEncoding="UTF-8"%>
  4. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  5.    "http://www.w3.org/TR/html4/loose.dtd">
  6.  
  7. <jsp:useBean id="cliente" scope="page" class="org.Bean1">
  8. <jsp:setProperty name="cliente" property="*" />
  9. </jsp:useBean>
  10.  
  11. <html>
  12.     <head>
  13.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  14.         <title>JSP Page</title>
  15.     </head>
  16.     <body>
  17.         <h1>Hello World Tomcat!</h1>
  18.         <form name="forma" method="POST" action="index.jsp">
  19.             <input type="text" name="texto" value="" />
  20.         </form>
  21.         <jsp:getProperty name="cliente" property="texto" />
  22.     </body>
  23. </html>

Código Java:
Ver original
  1. package org;
  2.  
  3. public class Bean1 {
  4.  
  5.     private String texto;
  6.  
  7.     public String getTexto() {
  8.         return texto;
  9.     }
  10.  
  11.     public void setTexto(String texto) {
  12.         this.texto = texto;
  13.     }
  14.  
  15. }

Para probarlo solamente escribe la letra Ñ y presiona Enter. De otra forma no tengo ni idea porqué motivo, una vez que ya configuraste todo, no funciona correctamente,

Saludos,

ps:

Para no tener que escribir << request.setCharacterEncoding("UTF-8"); >> en cada JSP, podrías crear un filter que se lo agregue a todos los JSP que Tomcat procese.
  #9 (permalink)  
Antiguo 17/10/2009, 10:58
 
Fecha de Ingreso: septiembre-2008
Mensajes: 15
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Acentos y Ñ en Beans usando JSP

Todo todo en orden, tal cual me muestras y aún así tengo el problema. Instalaré todo de nuevo en otro computador para ver si es que hay alguna configuración que esté causando problemas. Peor al menos en el código JSP no parece que tenga problemas. Contaré que tal me va.
  #10 (permalink)  
Antiguo 17/10/2009, 14:55
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Acentos y Ñ en Beans usando JSP

Hola,

Cita:
Iniciado por evilside Ver Mensaje
Todo todo en orden, tal cual me muestras y aún así tengo el problema. ...
Je, je ... últimamente parece que eso es muy común en mis soluciones ... no sé porque no funciona, a mi me funciona perfectamente aquí con el código de ejemplo que propuse, ingreso la Ñ y la recibo como Ñ (comprobado con un editor hexadecimal).

Pero bueno, posiblemente olvidé postear algo.

Saludos,

Última edición por HackmanC; 17/10/2009 a las 15:02 Razón: interpretación
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




La zona horaria es GMT -6. Ahora son las 21:46.