Ir al contenido principal

Leer Ñ en archivos desde Java

Siempre se me ha presentado este problema, cada vez que leo un archivo desde java, y este contiene caracteres como la Ñ, estos son tomado como símbolos raros:

Voy a mostrar el código que ocasiona esta distorsión, el archivo "D:\temporal\prueba.txt", cuyo contenido es:

PAÑALES DESCARTABLES
ÚTILES DE LIMPIEZA
VINO AÑEJO

Y el código es el siguiente:




import java.io.*;

/**
*
* @author mzavaleta
*/
public class TestÑ {

/**
* @param args the command line arguments
*/
public static void main(String[] args) throws FileNotFoundException, IOException {
// TODO code application logic here
FileInputStream fis = new FileInputStream("D:/temporal/prueba.txt");
InputStreamReader is = new InputStreamReader(fis);
BufferedReader bf = new BufferedReader(is);
String linea;
while ((linea = bf.readLine()) != null) {
System.out.println(linea);
}
bf.close();
is.close();
fis.close();
}
}


La salida es la siguiente:

PA�ALES DESCARTABLES
�TILES DE LIMPIEZA
VINO A�EJO

Pero si cambiamos la línea que dice:

InputStreamReader is = new InputStreamReader(fis);
Por

InputStreamReader is = new InputStreamReader(fis, "ISO-8859-1");

Se soluciona el problema y la salida es:


PAÑALES DESCARTABLES
ÚTILES DE LIMPIEZA
VINO AÑEJO

Espero que les sirva, el código final sería:


import java.io.*;

/**
*
* @author mzavaleta
*/
public class TestÑ {

/**
* @param args the command line arguments
*/
public static void main(String[] args) throws FileNotFoundException, IOException {
// TODO code application logic here
FileInputStream fis = new FileInputStream("D:/temporal/prueba.txt");
InputStreamReader is = new InputStreamReader(fis, "ISO-8859-1");
BufferedReader bf = new BufferedReader(is);
String linea;
while ((linea = bf.readLine()) != null) {
System.out.println(linea);
}
bf.close();
is.close();
fis.close();
}
}


















Comentarios

  1. Me ayudo mucho, esta facil de enterder pues lo explicas muy bien Gracias

    ResponderEliminar
  2. Parece fácil pero no me atrvo a usarlo, puedo dejar un desaguisado

    ResponderEliminar
  3. Gracias por compartirlo, fue de gran ayuda.

    ResponderEliminar
  4. Yo lo he usado con una lectura Scanner y también me ha funcionado:
    Scanner lee = new Scanner (System.in, "ISO-8859-1");

    Muy útil, muchas gracias!

    ResponderEliminar
  5. Muchas gracias por el tip, muy util!

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Java - Encriptacion / Desencriptacion de propiedades en archivo Properties

El siguiente ejemplo, permite grabar propiedades en un archivo .properties encriptadas y recuperar las mismas, estos son los pasos: Primero se crea la clase para el manejo de las Excepciones, el archivo se llama EncriptaException, este es el código: public class EncriptaException extends Exception{     public EncriptaException(String message) {         super(message);     } } Luego se crea la clase encargada de la encriptación y desencriptación, se llama Encripta, este es el código: import java.io.UnsupportedEncodingException; import java.security.InvalidAlgorithmParameterException; import java.security.InvalidKeyException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Arrays; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import javax.crypto...

Comparación de campos tipo NCHAR

Normalmente cuando se compara cadenas con campos del tipo NCHAR, se muestra el error: ORA-12704: character set mismatch O en español: ORA-12704: no coincide el juego de caracteres Para evitar este error se puede usar la función CSCONVERT cuya sintaxis es: CSCONVERT(cadena,'NCHAR_CS') Donde cadena es el valor que se quiere pasar a NCHAR. Veamos un ejemplo: Tenemos la tabla TABLA_NCHAR que tiene un solo campo tipo NCHAR: create table TABLA_NCHAR ( CAMPO_NCHAR NCHAR(25) ) Si intentamos hacer el siguiente query: select campo_nchar from tabla_nchar UNION SELECT 'TODOS LOS VALORES' FROM DUAL; select campo_nchar from tabla_nchar UNION SELECT 'TODOS LOS VALORES' FROM DUAL ORA-12704: character set mismatch Se mostrará el error indicado al inicio de este blog, pero si se usa la funcion el query funcionará correctamente: SQL> select campo_nchar from tabla_nchar 2 UNION 3 SELECT CSCONVERT('TODOS LOS VALORES','NCHAR_CS...

REST Client para Visual Studio Code

Extensión para usar request HTTP y CURL desde VSC Si deseas probar las invocaciones a api rest, sin usar herramientas como postman, desde Visual Studio Code, puedes instalar la extension REST Client Para poder usarlo, puedes crear un archivo con extensión rest o http, y con esto, de manera automática se va a tener el resaltado de sintaxis, tanto para el Request como para el Response , autocompletado de palabras clave y se van a mostrar el link "Send Request" sobre el request, en mi caso, probé con formato HTTP y CURL para HTTP, ejemplos con GET y POST GET https://petstore.swagger.io/v2/store/inventory POST https://petstore.swagger.io/v2/pet/1 Content-Type: application/x-www-form-urlencoded { "name":"Candy", "status":"active" } Para incluir varios request se debe usar una línea con la cadena siguiente: ###, como separador : Adicionalmente se puede definir variables con la siguiente sintaxis...