viernes
ago142015
Java 7: leyendo ficheros indicando el encoding
El escenario es el siguiente: tenemos un fichero de texto, desarrollado en codificación UTF-8, que debemos leer en nuestro sistema.
El contenido del fichero es el siguiente:
abcdefghijklmnñopqrstuvwxyz
áéíóú
pingüino
Para realizar la lectura, ejecutamos el siguiente código:
package javahispano; import java.io.IOException; import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; public class Main { private static final String FILE = "pruebasEncodingJava7_UTF8.txt"; private static final String PATH = "/home/jaimecl/Documentos/pruebas/"; private static final String UTF_8 = "UTF-8"; private static final String ISO_8859_1 = "ISO-8859-1"; public static void main(String args[]) { /* Obtenemos el fichero */ Path file = Paths.get(PATH, FILE); try { /* * Leemos todas las líneas del mismo en con encoding ISO_8859_1 y * mostramos la información por pantalla */ Charset charsetISO88591 = Charset.forName(ISO_8859_1); System.out.println("\nLeyendo el fichero con encoding " + ISO_8859_1 + "\n"); ListlinesISO88591 = Files.readAllLines(file, charsetISO88591); for (String lineISO88591 : linesISO88591) { System.out.println(lineISO88591); } /* Análogo al punto anterior, con encoding UTF_8 */ Charset charsetUTF8 = Charset.forName(UTF_8); System.out.println("\nLeyendo el fichero con encoding " + UTF_8 + "....\n"); List linesUTF8 = Files.readAllLines(file, charsetUTF8); for (String lineUTF8 : linesUTF8) { System.out.println(lineUTF8); } } catch (IOException e) { System.out.println(e); } } } }
¿Cuál es la salida del mismo?
Leyendo el fichero con encoding ISO-8859-1
abcdefghijklmnñopqrstuvwxyz
áéÃóú
pingüino
Leyendo el fichero con encoding UTF-8....
abcdefghijklmnñopqrstuvwxyz
áéíóú
pingüino
Como podemos ver, esta característica puede ser de mucha utilidad en estos casos. ¡A tener en cuenta, developers!
Reader Comments (1)
Con Java7 puedes mejorar el tema de algunos charsets, los que se garantiza que existirán en las distintas plataformas:
* StandardCharsets.ISO_8859_1
* StandardCharsets.UTF_8
No hay necesidad de recuperarlos mediante:
Charset charsetISO88591 = Charset.forName(ISO_8859_1);
Más información en el javadoc correspondiente.