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

Ayuda URGENTE!!!

Estas en el tema de Ayuda URGENTE!!! en el foro de Java en Foros del Web. Mi problema es el siguiente: Tengo una aplicación desarrollada en Java, con una base de datos mysql. La base de datos está codificada en latin1 ...
  #1 (permalink)  
Antiguo 02/06/2009, 02:12
 
Fecha de Ingreso: febrero-2008
Mensajes: 65
Antigüedad: 16 años, 2 meses
Puntos: 0
Ayuda URGENTE!!!

Mi problema es el siguiente:

Tengo una aplicación desarrollada en Java, con una base de datos mysql. La base de datos está codificada en latin1 y en la aplicación java uso UTF-8 (siempre que almaceno y recupero de bbdd realizo la conversión).

Hata ahora no había tenido ningún problema. Independientemente del carácter que escribiera en la aplicación, se almacenaba bien y se recuperaba bien. Sin embargo, no sé qué he podido tocar que ahora las vocales mayúsculas acentuadas y las Ñ (mayúsculas) en la aplicación no se ven correctamente (a pesar que en la bbdd se almacenan bien).

¿Alguien sabe a qué se puede deber esto y cómo solucionarlo?? Ya os digo que antes sí lo podía hacer bien pero ahora ya no.

Agradecería cualquier sugerencia, ya que me urge mucho solucionar este problema.

Muchas gracias de antemano.
  #2 (permalink)  
Antiguo 02/06/2009, 02:53
Avatar de frilex  
Fecha de Ingreso: junio-2009
Mensajes: 60
Antigüedad: 14 años, 11 meses
Puntos: 2
Respuesta: Ayuda URGENTE!!!

Probablemente puedas verificar el juego de caracteres que tienes en la 'capa de presentacion', si es un jsp, lo tienes facil.
Un saludo!
  #3 (permalink)  
Antiguo 02/06/2009, 03:01
 
Fecha de Ingreso: febrero-2008
Mensajes: 65
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Ayuda URGENTE!!!

No es un jsp, es una aplicación de escritorio en java normal y corriente
  #4 (permalink)  
Antiguo 02/06/2009, 03:52
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 3 meses
Puntos: 10
Respuesta: Ayuda URGENTE!!!

Wenas

Si antes funcionaba y ahora no, evidentemente algo habeis tocado que ha fastidiado el tema.

Si no has tocado el java mira la configuracion de la BBDD.

Saludos.

PD. Trata de ser mas especifica en los mensajes, los Ayuda urgente, no van a hacer que la gente se meta en el post a ver cual es el problema.
  #5 (permalink)  
Antiguo 02/06/2009, 04:23
Avatar de frilex  
Fecha de Ingreso: junio-2009
Mensajes: 60
Antigüedad: 14 años, 11 meses
Puntos: 2
Respuesta: Ayuda URGENTE!!!

o tal vez la version del jdbc esta traduciendo los caracteres. que versiones usas?
  #6 (permalink)  
Antiguo 02/06/2009, 04:42
 
Fecha de Ingreso: febrero-2008
Mensajes: 65
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Ayuda URGENTE!!!

He estado mirando y me he dado cuenta de que si ejecuto el proyecto desde Netbeans (IDE que estoy utilizando), me funciona perfectamente. Veo todo tipo de caracteres (Ñ, Á, Í, á, ñ, etc). Sin embargo, si genero el proyecto y lo ejecuto desde fuera de netbeans no funciona bien (las Ñ y las mayúsculas acentuadas no se ven bien).
Esto me da que pensar que pueda ser por alguna biblioteca que use netbeans y yo no la tengo agregada a mi directorio lib (que contiene todas las bibliotecas necesarias para la aplicación).

He estado buscando y no sé qué librería podría ser. Alguien tiene alguna idea??

Gracias por vuestra ayuda
  #7 (permalink)  
Antiguo 02/06/2009, 05:21
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 3 meses
Puntos: 10
Respuesta: Ayuda URGENTE!!!

Ehh , entonces es posible que nunca haya funcionado (fuera de netbeans, se sobreentiende).

Se graban bien en la BBDD?? Solo se muestran mal?? si en la BBDD se graban bien, no es problema del jdbc.

Si lo unico que pasa es que no se ven bien, es por el charset .

Es un requisito de tu aplicacion que lo tengas como UTF-8?? No puedes ponerlo como latin1 (ISO-8859-1)??

Saludos.
  #8 (permalink)  
Antiguo 02/06/2009, 05:31
 
Fecha de Ingreso: febrero-2008
Mensajes: 65
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Ayuda URGENTE!!!

En la base de datos se graban bien.
La base de datos va en latin1 y la aplicación en utf-8. La única posibilidad de modificar sería poner la base de datos como utf-8.

No podría ser por alguna librería que use netbeans internamente??
  #9 (permalink)  
Antiguo 02/06/2009, 08:45
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 3 meses
Puntos: 10
Respuesta: Ayuda URGENTE!!!

No se que libreria se podria encargar de eso que dices.

Mas bien puede que sea alguna opcion de menu o preferencia del IDE. Mira en la ayuda de netbeans.

Saludos.
  #10 (permalink)  
Antiguo 02/06/2009, 09:27
 
Fecha de Ingreso: febrero-2008
Mensajes: 65
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Ayuda URGENTE!!!

La verdad es que creo que me he mirado todas las opciones del menu de netbeans (uso la 5.5), pero seguiré buscando a ver si encuentro algo..

Gracias por la ayuda y si alguien tiene alguna idea se lo agradecía enormemente.
  #11 (permalink)  
Antiguo 02/06/2009, 11:08
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Ayuda URGENTE!!!

Si la base de datos está en Latin-1 y sacas y usas valores en una "aplicación UTF-8" es normal que no te funcione, puesto que no son compatibles.

Por cierto, ¿A que te refieres con que tu aplicación es UTF-8? A riesgo de parecer quisquilloso, una aplicación como tal no tiene codificación, hay codificación de ficheros, hay codificación de la respuesta HTML... hay muchas codificaciones en juego, pero nada que sea "de la aplicación".

No es por tocar la moral, es que en el caso de la codificación no puedes saltarte un detalle o no concuerdan y hay que ser metículoso y saber lo que se está haciendo cada vez que los caracteres pasan de un lado a otro.

S!

PD: Concuerdo con elAntonie que el título del post no es de lo más adecuado. De hecho he estado a punto de ignorarlo simplemente por ese título.
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #12 (permalink)  
Antiguo 02/06/2009, 12:50
 
Fecha de Ingreso: febrero-2008
Mensajes: 65
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Ayuda URGENTE!!!

Siento no haberme expresado bien. Lo que tengo es una base de datos codificada en Latin-1 y una aplicación que recupera los datos de la base de datos y tras un método de conversión entre Latin-1 y Utf-8 presenta los datos codificados con UTF-8. Y cuando intento insertar datos en la base de datos desde la aplicación, estos datos pasan por otro método para convertirlos de Utf-8 a Latin-1. Eso es lo que tengo.

Me gustaría saber si esto tiene solución sin tener que cambiar la codificación de la base de datos.

Gracias por vuestras respuestas.

P.D.: siento haber puesto ese título. La próxima vez seré más específica!!
  #13 (permalink)  
Antiguo 03/06/2009, 00:06
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Ayuda URGENTE!!!

Repito , ¿que quiere decir exactamente "presenta los datos codificados con UTF-8"? ¿Es una JSP, un servlet? ¿Se define UTF-8 en el contentType del HTML con un meta? ¿En el encoding del objeto response?... Con el encoding hay que mirar los detalles exactos.

Por otro lado... si realizais una conversion de Latin-1 a UTF-8.... ¿puede ser que ese método falle? Ya me imagino la respuesta, pero como dice la canción... "I've learnt to never underestimante the impossible"

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #14 (permalink)  
Antiguo 03/06/2009, 01:09
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 3 meses
Puntos: 10
Respuesta: Ayuda URGENTE!!!

Me cito

Cita:
Iniciado por elAntonie Ver Mensaje
Es un requisito de tu aplicacion que lo tengas como UTF-8?? No puedes ponerlo como latin1 (ISO-8859-1)??
  #15 (permalink)  
Antiguo 03/06/2009, 03:16
 
Fecha de Ingreso: junio-2009
Mensajes: 59
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: Ayuda URGENTE!!!

Mira esta pagina acerca de la codificacion: stan.com.mx/topics/view/12

Por otro lado para los caracteres en castellano te recomiendo que la BD la tengas de forma general en utf8 el CharSet y en utf8_general_ci el Collation

Luego tienes que tener en cuenta el CharSet de la tabla, repito, DE LA TABLA a la que consultas y de la q obtienes datos, en la que te recomiendo tener Charset: utf8 y Collation: utf8_spanish_ci, esto no te distinguirá entre palabras con tílde y sin tilde en esa tabla, pero te solucionará el tema de las ñ's.

A mi me paso, y era el CharSet y Collation de la tabla
  #16 (permalink)  
Antiguo 03/06/2009, 05:01
 
Fecha de Ingreso: febrero-2008
Mensajes: 65
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Ayuda URGENTE!!!

He estado mirando los caracteres que admite Latin1 y en la lista (según la wikipedia) sí están contempladas las vocales mayúsculas acentuadas y la Ñ mayúscula (son los únicos caracteres que me dan problemas).

Siento ser insistente pero no me acaba de quedar claro porqué no funciona si supuestamente ambas codificaciones contemplan estos caracteres...
  #17 (permalink)  
Antiguo 03/06/2009, 05:32
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Ayuda URGENTE!!!

UTF-8 e ISO-8859-1 contemplan las letras con acentos, la Ñ... pero no las "codifican" igual , así que aunque en ambos existan los caracteres no quiere decir que puedes cambiar de una codificación a otra así como así, hay que hacer conversiones de codificación.

Yo por mi parte sin algo más concreto no te puedo ayudar.
Suerte.
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #18 (permalink)  
Antiguo 03/06/2009, 06:00
 
Fecha de Ingreso: febrero-2008
Mensajes: 65
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Ayuda URGENTE!!!

Claro, pero es que hago una conversión (de utf-8 a latin1) antes de guardar en la base de datos y otra conversión (de latin1 a utf-8) cuando recupero de la base de datos para mostrar en la aplicación.
Los métodos son estos:

public String conversionFromLatinToUTF8 (String original){
String convertido="";
try {
byte[] utf8Bytes = original.getBytes("latin1");
convertido = new String(utf8Bytes, "UTF8");
}catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return convertido;
}


public String conversionFromUTFToLatin1 (String original){
String convertido="";
try {
byte[] utf8Bytes = original.getBytes("UTF8");
convertido = new String(utf8Bytes, "latin1");
}catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return convertido;
}
  #19 (permalink)  
Antiguo 03/06/2009, 08:06
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Ayuda URGENTE!!!

Esos metodos no convierten un String codificado de una forma en otro codificado de otra. Para empezar por que en Java no existen los "String codificados en Latin-1". Los String en Java estan codificados en UTF-16, siempre. Lo que si existe son los byte[] que representan un String según una codificación u otra.

Con esos métodos básicamente lo que se consigue son errores de codificación, ya que cojes un String codificado en UTF-16, lo conviertes a bytes codificados en X y luego construyes un String diciéndole que los bytes están codificados según Y, lo cual es falso.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #20 (permalink)  
Antiguo 04/06/2009, 00:58
 
Fecha de Ingreso: febrero-2008
Mensajes: 65
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Ayuda URGENTE!!!

Entonces, si estos métodos no sirven ¿Podrías echarme un cable y decirme cómo tendría que hacer la conversión??
La verdad es que estos métodos los saqué de google!!

Te lo agradecería enormemente
  #21 (permalink)  
Antiguo 04/06/2009, 02:36
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Ayuda URGENTE!!!

Lo más que te puede pasar en una aplicación de escritorio es que no leas bien lo que viene de la BDD, y normalmente eso se soluciona configurando el driver JDBC adecuadamente para que te devuelva los Strings ya correctamente modificados. Si no, tendrías que hacer tu las conversiones y hacer algunas cosas raras por que el String te llegaría mal convertido. Aparte de eso, solo podrás tener "problemas" si escribes en archivos o envias datos fuera por algun modo, pero internamente los Strings siempre son UTF-16 así que no hay que convertirlos a nada.

En todo caso y como referencia, los metodos de conversion serían "al reves" (los parametros E/S son byte[]), es decir:

Cita:
/*
Lee un array de bytes que representa una cadena codificada
en ISO-8859-1 y la devuelve como un array de bytes con la
misma cadena codificada en UTF-8
*/
public byte[] conversionFromLatinToUTF8 (byte[] original)
throws UnsupportedEncodingException
{
String convertido= new String(original, "ISO-8859-1");
return convertido.getBytes("UTF-8");
}
y viceversa

PD: Si el driver JDBC te devuelve mal los String, hay que mirar la documentación para ver como configurarlo o al menos saber en que codificación te los esta devolviendo mal para deshacerla.
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #22 (permalink)  
Antiguo 05/06/2009, 04:09
 
Fecha de Ingreso: febrero-2008
Mensajes: 65
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Ayuda URGENTE!!!

Creo que la conversión que me indicas es la misma que yo he puesto, salvo que tú ya le pasas el array de byte y yo lo hago dentro del método no??
He probado a poner ISO-8859-1 y funciona igual que si pongo Latin1
  #23 (permalink)  
Antiguo 05/06/2009, 05:03
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Ayuda URGENTE!!!

Si tu crees que es la misma... yo diría que no lo es .

Por otro lado, ISO-8859-1 es un alias de Latin1, son la misma codificación.
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #24 (permalink)  
Antiguo 05/06/2009, 05:42
 
Fecha de Ingreso: febrero-2008
Mensajes: 65
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Ayuda URGENTE!!!

Pues no sé, pero me sigue saliendo lo mismo..
  #25 (permalink)  
Antiguo 05/06/2009, 06:14
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Ayuda URGENTE!!!

No se si has leido bien lo que he escrito, o no me he explicado bien, pero la idea no es que uses ese metodo para convertir nada. O te vienen bien los datos a través del driver JDBC o hay que hacer cosas raras, pero lo primero es probar que vengan bien del driver. Lo del método de conversión es como referencia, pero en tu caso es "tarde" para usarlo si el driver ya te ha devuelto mal codificados los Strings.
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #26 (permalink)  
Antiguo 05/06/2009, 07:03
 
Fecha de Ingreso: febrero-2008
Mensajes: 65
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Ayuda URGENTE!!!

Ok,
gracias por tu ayuda. La verdad es que este campo es nuevo para mí, sobre todo en cuanto a configuración del JDBC.
Empezaré a mirarlo a ver qué pasa.

Muchas gracias por la ayuda y cualquier comentario que me pueda ayudar lo agradezco.
  #27 (permalink)  
Antiguo 05/06/2009, 07:31
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Ayuda URGENTE!!!

¿Que BDD es?
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #28 (permalink)  
Antiguo 05/06/2009, 12:31
 
Fecha de Ingreso: febrero-2008
Mensajes: 65
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Ayuda URGENTE!!!

MySQL (versión 4.0.21, un poco antigua.... pero es la que tengo que usar....)
  #29 (permalink)  
Antiguo 09/06/2009, 00:37
 
Fecha de Ingreso: febrero-2008
Mensajes: 65
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Ayuda URGENTE!!!

Bueno, al fin he solucionado el problema.
Después de mucho pensar porqué desde Netbeans funcionaba y desde fuera no, miré el conector para MySQL que usa Netbeans. Y efectivamente, no era el mismo que el que usaba yo. Lo que hice fue copiarme el .jar de mysql que tiene Netbeans en mis librerías y quitando mi conector y así ha funcionado.
No sé qué problema tendría el conector que usaba pero evidentemente no servía para la aplicación que yo necesitaba.

Muchas gracias a todos por vuestra ayuda y consejos.
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 00:04.