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:
¿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:
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.