# UTF 8 einlesen



## MStrike (23. Jul 2008)

Hallo Leute,

Ich möchte Strings aus einer UTF8 kodierten Datei einlesen. Wenn ich die Datei im Browser (Opera) oder einem UTF8 fähigen Editor öffne werden alle Zeichen korrekt dargestellt. Die Consolenausgabe in Java enthält allerdings viele nicht erkannte Zeichen.  

Es geht dabei um folgenden Code:



```
FileReader file = new FileReader("test.txt");
BufferedReader buff = new BufferedReader(file);
boolean eof = false;
String fileLine;
while (!eof)
{
  fileLine = new String(buff.readLine().getBytes("UTF8"),"UTF8");
  if (fileLine == null)
 {
eof = true;
}
System.out.println(fileLine);
}
buff.close();
file.close();
```

Was ich bisher schon probiert habe:

a) fileLine=new String(buff.readLine().getBytes("UTF8"));
b) fileLine = new String(buff.readLine().getBytes(),"UTF8");

Weiters habe ich das Encoding unter General/Workspace von cp1252 auf UTF8 umgestellt.


Ich weiß jetzt leider nicht mehr weiter und auch im Internet finde ich nichts was mich weiterbringen könnte. Ich wäre euch sehr dankbar wenn mir jemand einen Hinweis geben könnte.


mfg

MStrike


----------



## SlaterB (23. Jul 2008)

```
public static final Charset UTF_8_CHARSET = Charset.forName("UTF-8");


        InputStreamReader input = new InputStreamReader(new FileInputStream(file), UTF_8_CHARSET);
        BufferedReader reader = new BufferedReader(input);


        String line = null;
        while ((line = reader.readLine()) != null)
        {
           ..
        }
```


----------



## MStrike (23. Jul 2008)

Danke für die schnelle Antwort aber dieser Code funktioniert leider auch nicht. Noch irgendwelche Ideen?


----------



## SlaterB (23. Jul 2008)

wahrscheinlich liest du die Zeichen doch korrekt ein, hast aber eine schlechte Ausgabe,
wenn die kein UTF8 kann, dann ist da wenig zu machen,

such dir ein falsch dargestelltes Zeichen aus, und gib dazu auch den char-Wert als int aus,
dann starte ein neues Programm ohne jedes Datei-Einlesen und versuche einfach nur, einen entsprechenden Char auszugeben,
wenn das genauso nicht funktioniert, dann ist der Fehler zumindest gefunden,


----------



## MStrike (23. Jul 2008)

Hallo SlaterB,

hab das jetzt mal so gemacht wie du es beschrieben hast. Es funktioniert leider auch so nicht. Habe mir für einen namen der viele unerkannte Zeichen enthält die entsprechende int Sequenz ausgeben lassen:

65279,101,109,195,187,202,190,196,8220,108,32,90,97,107,107,195,187,116

Ergebnis nach konvertierung von int nach char:

?emÃ»Ê¾Ä“l ZakkÃ»t

Im Browser sieht der selbe String so aus:

Šemûʾēl Zakkût


----------



## SlaterB (23. Jul 2008)

wie gesagt ist das Problem wahrscheinlich die Konsole, das Einlesen ist korrekt,

du kannst die noch nicht näher benannte Konsole wahrscheinlich nicht zwingen, UTF-8 anzuzeigen,
wenn du die Zeichen aber in eine andere Datei schreibst und diese mit ' einem UTF8 fähigen Editor ' öffnest, dann sollte die Anzeige wieder funktionieren


----------



## MStrike (23. Jul 2008)

Das habe ich am Anfang auch vermutet. Leider ist dem nicht so.

Sobald ich es eingelesen habe und dann wieder in eine Textdatei schreibe zeigt es auch der Browser bzw ein UTF8 fähiger Editor nicht mehr richtig an. Mitlerweile bin ich ziemlich ratlos


----------



## SlaterB (23. Jul 2008)

vielleicht schreibst du ja nicht richtig in UTF-8,
ich habe dazu aber kein Beispiel


----------



## GilbertGrape (23. Jul 2008)

Das Rausschreiben funktioniert doch auch wie das Einlesen mit dem Charset oder?


```
FileOutputStream fo = new FileOutputStream(outputFilename);
			Charset cs = Charset.forName("UTF-8");
			OutputStreamWriter ow = new OutputStreamWriter(fo, cs);
```


----------

