Pregunta

En Java, estoy tratando de analizar un archivo HTML que contiene texto complejo como símbolos griegos.

Me encuentro con un problema conocido cuando el texto contiene un signo de comillas frente a la izquierda. De texto como

mutations to particular “hotspot” regions

se convierte

 mutations to particular “hotspot�? regions

He aislado el problema escribiendo un simple meathod la copia del texto:

public static int CopyFile()
{
    try
    {
    StringBuffer sb = null;
    String NullSpace = System.getProperty("line.separator");
    Writer output = new BufferedWriter(new FileWriter(outputFile));
    String line;
    BufferedReader input =  new BufferedReader(new FileReader(myFile));
while((line = input.readLine())!=null)
    {
        sb = new StringBuffer();
        //Parsing would happen
        sb.append(line);
        output.write(sb.toString()+NullSpace);
    }
        return 0;
    }
    catch (Exception e)
    {
        return 1;
    }
}

¿Alguien puede ofrecer algún consejo como la manera de corregir este problema?

? Mi solución

InputStream in = new FileInputStream(myFile);
        Reader reader = new InputStreamReader(in,"utf-8");
        Reader buffer = new BufferedReader(reader);
        Writer output = new BufferedWriter(new FileWriter(outputFile));
        int r;
        while ((r = reader.read()) != -1)
        {
            if (r<126)
            {
                output.write(r);
            }
            else
            {
                output.write("&#"+Integer.toString(r)+";");
            }
        }
        output.flush();
¿Fue útil?

Solución

La lectura archivo no está en la misma codificación (probablemente UTF-8) que el archivo escrito (probablemente ISO-8859-1).

Pruebe lo siguiente para generar un archivo con codificación UTF-8:

BufferedWriter output = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputFile),"UTF8"));

Por desgracia, la determinación de la codificación de un archivo es muy difícil. Ver Java: Cómo determinar la codificación de juego de caracteres correcto de una corriente de

Otros consejos

Además de lo escrito por Thierry-Dimitri Roy, si conoce la codificación que tiene que crear su FileReader con un poco de trabajo extra. A partir de los documentos:

  

clase de conveniencia para la lectura   archivos de caracteres. Los constructores de   esta clase asume que el valor predeterminado   La codificación y el valor predeterminado   tamaño-buffer byte son apropiados. A   especificar estos valores usted mismo,   construir un InputStreamReader en una   FileInputStream.

El Javadoc para FileReader dice :

  

Los constructores de esta clase asumen que la codificación de caracteres por defecto y el tamaño de byte de búfer predeterminado son las adecuadas. Para especificar estos valores a ti mismo, construir un InputStreamReader en un FileInputStream.

En el caso de la codificación de caracteres por defecto es probablemente no apropiado. Encuentra lo que codificar los usos del fichero de entrada, y especificarlo. Por ejemplo:

FileInputStream fis = new FileInputStream(myFile);
InputStreamReader isr = new InputStreamReader(fis, "charset name goes here");
BufferedReader input = new BufferedReader(isr);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top