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

Leer fichero con caracteres especiales

Estas en el tema de Leer fichero con caracteres especiales en el foro de Java en Foros del Web. Buenos días a todos, Estoy tratando ficheros txt con java y los "caracteres especiales" me los lee y escribe caracteres raros (cuadrados). ¿Cómo puedo hacer ...
  #1 (permalink)  
Antiguo 20/09/2010, 12:32
 
Fecha de Ingreso: febrero-2008
Ubicación: Madrid
Mensajes: 474
Antigüedad: 16 años, 2 meses
Puntos: 1
Exclamación Leer fichero con caracteres especiales

Buenos días a todos,

Estoy tratando ficheros txt con java y los "caracteres especiales" me los lee y escribe caracteres raros (cuadrados).

¿Cómo puedo hacer para que lea y escriba bien esos caracteres? He buscado sobre codificación pero no encuentro nada...

Mi código es este:

Código:
...
BufferedReader br = null;
        BufferedWriter out = null;
        try{
            br = new BufferedReader(new FileReader(jFileChooser1.getSelectedFile()));            

            out = new BufferedWriter(new FileWriter( "c:/traducido.txt", true));
            String lineaLeida;

            while ((lineaLeida =  br.readLine()) != null) {
                System.out.println("Linea leida: " + lineaLeida);
                System.out.println("Linea traducida: " + tratarLinea(lineaLeida));
                out.write(strToHtml(lineaLeida));
            }
...
Muchas gracias.
  #2 (permalink)  
Antiguo 20/09/2010, 13:24
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: Leer fichero con caracteres especiales

Hola,

El proceso es complejo puesto que están en juego varios archivos y un documento HTML, aparte que es imposible saber en que tabla de caracteres está todo tu sistema funcionando solamente con la información que mostraste.

Pero puedes tomar en cuenta los siguientes factores para intentar solucionar ese inconveniente. Primero tienes que saber en que charset está el documento de entrada, la clase FileReader usa el charset por defecto del sistema operativo, así que si el documento está en ISO-8859-1 y usas FileReader en Linux con UTF-8 lo va a leer incorrectamente. Aunque ese inconveniente lo puedes solventar facilmente usando InputStreamReader en lugar de FileReader.

Ahora viene el inconveniente mas difícil de detectar ...

Si ese documento JSP está guardado en UTF-8 y lees el documento que está en ISO-8859-1 y lo insertas con out.write(), te va a quedar la parte del JSP en UTF y la parte insertada en ISO, lo cual no correcto. No podrías poner un encabezado meta Content-Type ni UTF ni ISO, puesto que la mitad es UTF y la mitad es ISO.

Para resolver ese problema podrías intentar lo siguiente:

Primero usa InputStreamReader en lugar de FileReader, el constructor de InputStreamReader tiene un segundo parámetro para indicar el charset, asegúrate que ese segundo parámetro es el charset en el que está guardado el documento que estas leyendo.

Segundo asegúrate completamente que el archivo JSP está guardado en UTF y tiene el encabezado UTF, o en su defecto que está guardado en ISO y tiene el encabezado ISO. El archivo de salida (traducido.txt) no es problema después de estas modificaciones.

Eso es lo que yo haría, pero también comprendo que es complejo, algunas de esas operaciones dependen hasta del sistema operativo que estas usando y es difícil saber con exactitud si te va a funcionar de esta forma.

Saludos,
  #3 (permalink)  
Antiguo 20/09/2010, 13:37
 
Fecha de Ingreso: febrero-2008
Ubicación: Madrid
Mensajes: 474
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Leer fichero con caracteres especiales

Muchísimas gracias por tu respuesta, no sabía que podría resultar tan complejo. Voy a probar lo que me has comentado. Un saludo.

Etiquetas: caracteres, especiales, fichero
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 03:27.