# UTF8 txt-Datei lesen



## Java_Opfer (1. Okt 2010)

Hi,
ich habe eine Datei mit folgendem Inhalt:

```
اختبار
```
Gespeichert hatte ich sie einmal mit Notepad und testweise auch mit eclipse als UTF-8.

So versuche ich sie zu lesen:
[Java]		BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("D:\\Arabic.txt")), "UTF-8"));
		String s;
		while ((s = br.readLine()) != null)
			System.out.println(s);[/code]

Die Ausgabe sieht allerdings so aus:

```
???????
```

Was mache ich falsch? Laut vielen internet Beispielen sollte es eigentlich funktionieren...


----------



## jgh (1. Okt 2010)

Du musst unter Eclipse->Window->Preferences->General->Workspace auch UTF-8 einstellen, dann klappt das einwandfrei


----------



## Bernstein (1. Dez 2012)

Hallo, ich habe derzeit das gleiche Problem.

Bei mir sieht das ganze so aus:


```
FileInputStream fileInput= new FileInputStream(eingabeDatei);
        InputStreamReader streamReader= new InputStreamReader(fileInput, "UTF-8");
        BufferedReader buffered= new BufferedReader(streamReader);
        
        String eineZeile= buffered.readLine();

        while( zeile != null) {
            System.out.println(eineZeile);
            eineZeile= buffered.readLine();
        }
        buffered.close();
```


An Stelle von Umlauten erscheinen aber nur Quadrate, während aber anderweitig ausgegebene Umlaute in der Konsole erscheinen.
Warum?


----------



## TKausL (1. Dez 2012)

Bernstein hat gesagt.:


> ```
> FileInputStream fileInput= new FileInputStream(eingabeDatei);
> InputStreamReader streamReader= new InputStreamReader(fileInput, "UTF-8");
> BufferedReader buffered= new BufferedReader(streamReader);
> ...



Das sollte eigentlich garnicht Funktionieren... schaus dir nochmal genau an.


----------



## Ark (1. Dez 2012)

Mal davon abgesehen, dass der Thread schon etwas alt ist:

@Bernstein: Die Zeichenkodierung (bzw. der Zeichensatz), die du zur Ausgabe in den Standardausgabestrom (System.out) verwendest, stimmt wahrscheinlich nicht mit der Zeichenkodierung der Konsole überein.

Ark


----------



## Bernstein (1. Dez 2012)

TKausL hat gesagt.:


> Das sollte eigentlich garnicht Funktionieren... schaus dir nochmal genau an.



Ich hab es ein wenig abgeändert für das Forum, die Variablen habe ich umbenannt. 

Trotzdem ist es das gleiche Prinzip.


----------



## Bernstein (1. Dez 2012)

Ark hat gesagt.:


> Mal davon abgesehen, dass der Thread schon etwas alt ist:
> 
> @Bernstein: Die Zeichenkodierung (bzw. der Zeichensatz), die du zur Ausgabe in den Standardausgabestrom (System.out) verwendest, stimmt wahrscheinlich nicht mit der Zeichenkodierung der Konsole überein.
> 
> Ark



??? 
Nichts verstanden. 

:noe::noe:


----------



## Ark (1. Dez 2012)

Zeichensalat ? Wikipedia

Ark


----------



## trääät (1. Dez 2012)

UTF-8 über system.out wird wenn überhaupt nur unter unix funktionieren ... unter windows hat cmd.exe grundsätzlich CP850 ... den rest verrät google


----------



## Bernstein (1. Dez 2012)

Was ein Zeichensatz ist, weiß ich.
 Aber was Standartausgabestrom jetzt von Konsole unterscheidet, ist mir schleierhaft. 

Außerdem ist mein Programm um einiges größer, die Ausgabe wird zusätlich noch in einen StringBuffer gespeichert und später an eine GUI weitergegeben. Dort erscheinen dann genau die gleichen Zeichen.


----------



## Ark (1. Dez 2012)

trääät hat gesagt.:


> UTF-8 über system.out wird wenn überhaupt nur unter unix funktionieren ... unter windows hat cmd.exe grundsätzlich CP850 ... den rest verrät google


BTW: Zwecks Verwirrung verwenden praktisch alle anderen Windows-Programme auch noch Windows-1252 …



Bernstein hat gesagt.:


> Außerdem ist mein Programm um einiges größer, die Ausgabe wird zusätlich noch in einen StringBuffer gespeichert und später an eine GUI weitergegeben. Dort erscheinen dann genau die gleichen Zeichen.


Wurde denn die richtige Kodierung zum Einlesen des Textes benutzt?

Ark


----------



## Bernstein (1. Dez 2012)

Ich denke schon... Ich habe ein "normales" Text-Dokument erstellt, worin sich Umlaute befinden.
Das ganze kompliere ich inzwischen über Netbeans. 
ich frage mich, was da schief läuft.


----------



## trääät (2. Dez 2012)

das problem ist wie gesagt windows selbst ...
CMD.exe verwendet CP850 ... also müsste man System.out mit nem Charset CP850 überschreiben um halbwegs zu hoffen eine richtige ausgabe zu bekommen ... oder man versucht CMD.exe selbst in einen andren zeichensatz zu schalten ... was aber bei UTF-8 zum absturz führt ...

dann verwendet windows selbst noch Win-1251 (oder auch ISO-8859-1) ... der sich noch mal sowohl von CP850 als auch UTF-8 unterscheidet ...

da java intern aber in der regel mit UTF-8 arbeitet ... von windows aber an UTF-8 inputstreams nur Win1251 müll gelifert bekommt ... und UTF-8 outputstreams auf ner console im CP850 nur müll ergeben muss man die entsprechenden streams vorher mit charsets codieren damit java damit auch richtig umgehen kann ...

wie gesagt : unter unix kein problem ... denn da arbeitet fast alles (mit ausnahme einiger spezieller shells) mit UTF-8 ... und da fühlt sich java nun mal wohl ...


----------



## Bernstein (2. Dez 2012)

Ah, ok, danke jetzt habe ich es verstanden.

Ich habe mich jetzt erst mal daran gemacht, mein Dokument mit Hilfe meines Programms zuerst abzuspeichern in UTF-8 und DANN erst wieder auszulesen. Das war zwar so etwas wie "blind" kodieren, hat aber funktioniert. Jetzt weiß ich auch, warum 

Danke für die vielen Beiträge,

Bernstein


----------

