# Problem beim Einlesen von Textdatei mit UTF-8



## DarthShader (25. März 2008)

Guten Abend zusammen,

ich würde mich über ein wenig Unterstützung bei folgendem kleinen Problem freuen:

Ich habe hier eine Textdatei (mit dem Programm UltraEdit32) erstellt, in der folgende Zeilen sind:


```
Mars
Jupiter
Erde
Sonne
Pluto
Venus
Uranus
Merkur
Saturn
Ü
Ä
Ö
```

Die Kodierung ist UTF-8, Unix Zeilenenden. Ich lese diese Datei folgendermaßen ein:


```
List< String > lines = new ArrayList< String >();
String line = null;
BufferedReader br = new BufferedReader( new InputStreamReader( in, "UTF-8" ) );
		
while ( ( line = br.readLine() ) != null )
	lines.add( line );
```

("in" ist ein FileInputStream)

Gebe ich die String in "lines" aus, so erhalte ich diese Ausgabe auf der Console:


```
?Mars
Jupiter
....
```

(der Rest nach ... ist identisch mit oben).

Woher jedoch kommt das "?" (welches ja nur ein Platzhalter für irgendein nichtdarstellbares Zeichen ist) vor "Mars"?

Das hat sicher irgendetwas mit der Kodierung zu tun, aber bei der Thematik habe ich mich schon immer verfranzt  Ich hoffe jemand kann etwas Licht ins Dunkel bringen!

Vielen Dank


----------



## zeja (25. März 2008)

Arbeitest du unter Windows und lässt dir das ganze auf der Konsole ausgeben? Windows hat nämlich keine Unicode-Konsole, daher können Unicode Zeichen dort nicht korrekt dargestellt werden.

Wie siehts mit den Umlauten aus, werden die korrekt dargestellt?


----------



## DarthShader (25. März 2008)

Ja ich arbeite unter Windos. Allerdings möchte ich letztendlich die Wörter in JLabels anzeigen und auch ein JLabel zeigt mir solch einen Platzhalter an (kein Fragezeichen sondern an der Stelle ein kleines Rechteck).

Umlaute werden korrekt dargestellt, auf der Konsole sowie auch auf einem JLabel.

Es ist ja sehr merkwürdig, dass genau am Anfang dieses komische Zeichen auftaucht. Als wenn es von der Kodierung her dort Informationen gibt, die Java nicht interpretieren kann, oder sowas in der Art.


----------



## zeja (25. März 2008)

Hab ich ganz vergessen dir zu antworten... sorry.

Wenn die Umlaute korrekt sind, dann sollte das einlesen auch korrekt sein. Lösch doch mal den Dateianfang vom Mars inklusive M und gib das neu ein. Vllt steht da echt unsinn.


----------



## DarthShader (25. März 2008)

Das habe ich mal ausprobiert, und das Fragezeichen taucht wieder am Anfang auf. Das ist wirklich merkwürdig... aber ich denke mal eine Textdatei als UTF-8 mit Unix Zeilenende per UltraEdit32 zu speichern, kann ja nicht falsch sein (Das Programm ist ja für Textverarbeitung nicht gerade unbakannt).

Würdest Du es vielleicht einmal bei Dir ausprobieren, wenn ich die Textdatei zur Verfügung stelle?


----------



## zeja (25. März 2008)

Hmm ich kanns ausprobieren obs bei mir geht ja, ist allerdings nen Ubuntu.


----------



## Matthias Reitinger (25. März 2008)

Hallo,

möglicherweise steht am Anfang der Datei ein Byte Order Mark. Schau mal, ob du deinen Editor dazu bringen kannst, das nicht mehr in die Datei zu schreiben.

Grüße,
Matthias


----------



## DarthShader (26. März 2008)

Matthias Reitinger hat gesagt.:


> möglicherweise steht am Anfang der Datei ein Byte Order Mark. Schau mal, ob du deinen Editor dazu bringen kannst, das nicht mehr in die Datei zu schreiben.



Das war es tatsächlich. In UltraEdit32 gibt es die Möglichkeit, beim Speichern der Datei "UTF-8 ohne BOM" zu wählen. Nun liest er korrekt ein.

Vielen Dank! Wieder was gelernt


----------

