# UTF-8 Text



## Bollywood (2. Mrz 2009)

Hallo,

Ich habe erst vor ein paar Wochen Java gelernt, bitte schlagt mich noch nicht für unschönen Code .

Folgende Schwierigkeit hat sich ergeben: Ziel ist es, eine Datei zeilenweise einzulesen, und Berechnungen über die Wortdimensionen anzustellen. Das klappt für einen deutschen Text ganz gut, jedoch will ich vor allem Sprachen mit anderen Zeichensätzen einlesen und bearbeiten (vor allem Hindi). Hier geschieht es jedoch, dass beim Auslesen noch gewisse Metainformationen über den Text als Inhalt mitgeliefert werden. Wie kann ich das vermeiden?

Im Dokument befindet sich nur 1 Zeile Hindi-Text, die Zahlen sind das Berechnungsergebnis, die Zeile davor das, was das Programm aus der Datei liest, es "erkennt" also 3 Zeilen.


```
{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fswiss\fcharset1 Mangal;}{\f1\fnil\fcharset0 Courier New;}}
0, 378, 15; 381, 518, 15; 521, 562, 15; 565, 601, 15;  Geschrieben
{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\f0\fs20\u2319?\u2325? \u2310?\u2342?\u2350?\u2368? \u2360?\u2337?\u2364?\u2325?\f1\par
0, 68, 15; 71, 113, 15; 116, 433, 15; 436, 616, 15; 619, 833, 15;  Geschrieben
}
0, 4, 15;  Geschrieben
```

Hier der Code der Klasse:
[HIGHLIGHT="Java"]

package job;

import java.io.*;
import java.util.StringTokenizer;

public class Routine {

    //Konstruktor
    public Routine(File Datei,String Font, int Fontsize )
    {
    try{
        try{
        // Inputdatei lesen
        BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(Datei), "UTF8"));
        eingabe = in;
            }
         catch(Exception e){System.out.println("Eingabedatei konnte nicht gelesen werden");}


        try{
        // Outputdatei erstellen
        Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(ausgaben(Datei)), "UTF8"));
         ausgb = out;
           }
        catch(Exception e){System.out.println("Ausgabedatei konnte nicht erstellt werden");}

       // Breite des Leerzeichens ermitteln
       Wort leer = new Wort(" ", Font, Fontsize);
       int leerzeichen = leer.getWidth();

       // Ausgabestring beginnen
       ausgabe = "";
       // Forschritt beginnen
       fortschritt = 0;

       // Berechnungen durchführen und in Outputdatei schreiben
       while((tmp=eingabe.readLine())!=null){
             StringTokenizer st = new StringTokenizer(tmp);

             while (st.hasMoreTokens()) {

                 // Wort mit 3 Argumenten initialisieren
                Wort akt = new Wort(st.nextToken(), Font, Fontsize );

                // Höhe und Breite herausfinden
                int hoehe = akt.getheight();
                int breite = akt.getWidth();

                // Den Satzstring weiter aufbauen
                aufbau(hoehe, breite, leerzeichen);
                }

            // System.out.println(tmp);
                // Ausgabestring in Datei schreiben
                // String schreiben  = ausgabe+"\n";
                ausgb.write(ausgabe);
                // System.out.println(ausgabe+" Geschrieben");

                // Aufbauvariablen zurücksetzen
                ausgabe ="";
                fortschritt = 0;
     }
                // Aufräumen
                eingabe.close();
                ausgb.close();

 }
    catch(Exception e){ System.out.println("Routine konnte nicht erstellt werden");}

 }


    //Name der Ausgabedatei ermitteln
    private String ausgaben(File eingabe)
    {
         return eingabe.getParent()+"\\AOI_"+eingabe.getName();
    }

    private void aufbau(int hoehe, int breite, int leer)
    {
        //String roher = fortschritt.toString();
        // int start = fortschritt + leer;
        int anfang =  fortschritt;
        int ende = fortschritt + breite;
        ausgabe = ausgabe + anfang + ", " + ende + ", " + hoehe + "; ";
        fortschritt = fortschritt + breite + leer;
    }

    // Instanzvariablen
    String ausgabename,tmp, ausgabe;
    BufferedReader eingabe;
    Writer ausgb;
    int fortschritt;


}
[/HIGHLIGHT]


----------



## Wildcard (2. Mrz 2009)

Was denn für 'Metainformationen'?


----------



## Fancy (2. Mrz 2009)

Moin,



Bollywood hat gesagt.:


> ```
> {\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fswiss\fcharset1 Mangal;}{\f1\fnil\fcharset0 Courier New;}}
> 0, 378, 15; 381, 518, 15; 521, 562, 15; 565, 601, 15;  Geschrieben
> {\*\generator Msftedit 5.41.15.1515;}...
> ```



Dein Quelltext lässt vermuten, dass Du UTF-8 plaintext einlesen willst, Deine Datei ist aber eine mit dem WordPad verfasste RTF Datei. 

Versuche mal folgendes:

[HIGHLIGHT="Java"]final RTFEditorKit rtfEditorKit = new RTFEditorKit();
final Document document = new DefaultStyledDocument();

final BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(datei), "UTF8"));

rtfEditorKit.read(in, document, 0);

final String plaintext = document.getText(0, document.getLength());

System.out.println(plaintext);[/HIGHLIGHT]

Gruß,
Michael


----------



## Bollywood (4. Mrz 2009)

Vielen Dank, es lag wirklich an der falschen Eingangsdatei. Plain UTF-8 und alles läuft schick


----------

