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

Problema codificación caracteres

Estas en el tema de Problema codificación caracteres en el foro de Java en Foros del Web. Hola, os escribo porque llevo todo el día tirandome de los pelos con esto y no tiene nada que ver con el proyecto que estoy ...
  #1 (permalink)  
Antiguo 21/10/2010, 13:19
 
Fecha de Ingreso: octubre-2010
Mensajes: 2
Antigüedad: 13 años, 6 meses
Puntos: 0
Problema codificación caracteres

Hola,

os escribo porque llevo todo el día tirandome de los pelos con esto y no tiene nada que ver con el proyecto que estoy realizando pero ya es por mayores.

estoy realizando una aplicación java y cada vez que muestro algo de texto por consola, terminal o simbolo de sistema(he probado en windows , ubuntu y mac osx) no me muestra ni los acentos, ni la ñ, ni ¿.

se que es problema de la codificación, como estoy trabajando con netbean 6.7.1 he ido a las propiedades del proyecto y he comprobado y cambiado la codificacion de utf-8 a iso 8859-1 para ver si asi se solucionaba pero nada... he probado cambiando por desesperacion el jdk del 6 al 5 y nada.

he leido todos los posts del foro que he encontrado con este problema y ninguno me ha arrojado demasiada luz, aparte de lo que yo ya había realizado.

y google tampoco ha sabido ayudarme :(

Espero de verdad que alguien me ayude, porque debería de volver ha hacer el proyecto pero ya es cabezonería, ya que nunca había tenido este problema con la codificación de caracteres.

Un saludo y muchas gracias!!
  #2 (permalink)  
Antiguo 21/10/2010, 15:07
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: Problema codificación caracteres

Hola,

Posiblemente lo que sucede es que Java detecta la pagina de códigos del sistema operativo pero la consola usa otra página de códigos diferente. Veamos con ejemplos:

Crea una aplicación básica para probar:
(*nota: el archivo está guardado en ISO-8859-1 en este caso y es muy importante para demostrar el ejemplo)
Código:
public class prueba {
    public static void main(String[] args) {
	System.out.println(java.nio.charset.Charset.defaultCharset());
	System.out.println("á");
    }
}
Esta simple aplicación nos va a mostrar la página de códigos que está usando Java para mostrar los caracteres en la consola y seguidamente la letra á, pero va a variar dependiendo de la tabla de caracteres y la tabla con que está guardado el archivo.

Por ejemplo, Windows en Español normalmente usa la tabla de caracteres Windows-1252, pero la consola usa la tabla de caracteres en inglés CP437 (en mi caso la CP850). Ahora si ejecutamos esa aplicación en Windows en una consola nos va a mostrar lo siguiente:
Código:
windows-1252
ß
¿Que fue lo que sucedió? Java detecto la tabla de caracteres Windows-1252 en mi sistema y usó el código 225 (en hexadecimal 0xE1), si revisamos esa tabla nos va a mostrar que efectivamente es ese el código de la letra á. Windows-1252

Ahora la consola la muestra en lo que entendió, que es la página de código CP850, en esa página de código el número 225 (en hexadecimal 0xE1) es otro caracter completamente diferente ß. Code page 850

Al final lo que sucedió fue que las tablas no coinciden. Cuando una tabla de carateres cree que el 255 225 es la letra á, la otra tabla cree que es la letra ß.

La solución mas fácil para resolver este inconveniente es que uses la opción -D del interprete de Java. Y ejecutar la aplicación de esta forma:
Código:
java -Dfile.encoding=cp850 prueba
Obligando a Java a usar la tabla de código 850 para todos los archivos donde escriba, incluyendo la salida a la consola o terminal (que es un archivo). Y el resultado que obtendríamos sería el siguiente:
Código:
IBM850
á
En tu caso tendrías que averiguar cual la tabla de código que usa la consola, en Windows podrías usar el comando mode:
Código:
C:\>mode con

Estado para dispositivo CON:
----------------------------
    Líneas:              300
    Columnas:            120
    Ritmo del teclado:   31
    Retardo del teclado: 1
    Tabla de códigos:    850 
Saludos,

ps:

Al guardar el archivo en UTF8 e intentar mostrar en consola los caracteres extendidos es mas complicado porque 'según lo que yo tengo entendido' no hay forma que la consola de windows entienda UTF.

Última edición por HackmanC; 21/10/2010 a las 15:58 Razón: corrección 225 x 255
  #3 (permalink)  
Antiguo 24/10/2010, 03:07
 
Fecha de Ingreso: octubre-2010
Mensajes: 2
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Problema codificación caracteres

Hola, muchisimas gracias por todo.

Siento no haber podido contestar hasta hoy, pero esque no he podido probarlo antes, funciona de lujo.

¿Sabes con que comando mirar que tabla de códigos utiliza el terminal(MAC) o la consola(linux)?

Un saludo, y de nuevo muchas gracias por todo.

Etiquetas: caracteres
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 15:26.