Frage

In Java Ich versuche, eine HTML-Datei zu analysieren, die komplexen Text wie griechische Symbole enthält.

Ich begegne ein bekanntes Problem, wenn der Text ein nach links gegen Anführungszeichen enthält. Text wie

mutations to particular “hotspot” regions

wird

 mutations to particular “hotspot�? regions

Ich habe das Problem isoliert durch einen einfachen Text-Kopie meathod writting:

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;
    }
}

bieten kann jemand ein paar Ratschläge, wie man dieses Problem zu beheben?

? Meine Lösung

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();
War es hilfreich?

Lösung

Die Datei Lese ist nicht in der gleichen Codierung (wahrscheinlich UTF-8) als die Datei geschrieben (wahrscheinlich ISO-8859-1).

Versuchen Sie, die im Anschluss an eine Datei mit UTF-8-Codierung zu erzeugen:

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

Leider ist die Codierung einer Datei bestimmen, ist sehr schwierig. Siehe Java: Wie die richtige charset bestimmen eines Stroms

Andere Tipps

Zusätzlich zu dem, was Thierry-Dimitri Roy schrieb, wenn Sie wissen, das Codieren Sie Ihre Filereader mit einem wenig zusätzlichen Arbeit. Aus der Dokumentation:

  

Convenience-Klasse zum Lesen   Zeichendateien. Die Konstrukteure   diese Klasse geht davon aus, dass der Standard   Zeichencodierung und der Standard   Byte-Puffergröße geeignet ist. Zu   geben diese Werte selbst,   eine Input auf ein Konstrukt,   Fileinputstream.

Die Javadoc für FileReader sagt :

  

Die Konstrukteure dieser Klasse gehen davon aus, dass die Standard-Zeichencodierung und die Standard-Byte-Puffergröße geeignet ist. Um diese Werte selbst festlegen, konstruiert einen Input auf einem Fileinputstream.

In Ihrem Fall der Standard-Zeichenkodierung ist wahrscheinlich nicht angemessen. Finden Sie, was die Eingabedatei verwendet codiert, und geben Sie es. Zum Beispiel:

FileInputStream fis = new FileInputStream(myFile);
InputStreamReader isr = new InputStreamReader(fis, "charset name goes here");
BufferedReader input = new BufferedReader(isr);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top