# Charset Encoding für Dateinamen



## Mikes222 (17. Mai 2011)

Hallo, 

ist mir ja fast peinlich, das hier reinzuschreiben, aber ich habe massive Probleme mit dem Lesen von Dateinamen. Kurz als Erklärung:
Auf einer Debian Maschine läuft Samba als Fileserver. Hier finden sich Dateien mit Umlauten zB. Pläne.doc. 
Wenn ich die Dateien unter Windows ansehe, sehe ich sie richtig: Pläne.doc
Unter debian sehe ich Pl??ne.doc (2 Fragezeichen)

Im Programm mache ich nun folgendes: 

```
File dir = new File(path);
		String[] names = dir.list();
		if (names == null) {
			return;
		}
		for (String name : names) {
				FileInputStream fis = new FileInputStream(path + File.separator
						+ name);
				fis.close();
                }
```

und erhalte:
java.io.FileNotFoundException (/<pfad>/Pl??ne.doc (No such file or directory)
bei FileInputStream. 

Kann mir jemand einen Tipp geben, wie ich den Dateinamen richtig hinbekomme? 
In der allwissenden Müllhalde habe ich nichts brauchbares gefunden und beim Spielen mit new String(name.getBytes("xxx")) bin ich auch nicht draufgekommen wie man es machen könnte. 

Vielen Dank, Mikes222


----------



## SlaterB (17. Mai 2011)

für File.listFiles() kommst du doch an die richtigen File-Objekte,
wie sieht es damit aus, funktioniert  FileInputStream ?

vergleiche die Pfad dieser richtigen File-Objekte mit den eigenen zusammengebauten aus dem names-Array,
equals? liegt es am File.separator?
vergleiche nur den letzlichen Dateinamen, equals? vergleiche die Länge der Strings, vergleiche Zeichen für Zeichen, hole die chars heraus, caste sie auf int,
welche exakten Unterschiede bestehen in einem Beispiel?


----------



## Mikes222 (17. Mai 2011)

Danke für die schnelle Antwort. 

Es ist egal, ob ich list() oder listFiles() verwende. Die Datei kann nicht gelesen werden. 

Der Dateiname "Pläne" ist dezimal mit 80,108,65533,65533,110,101 kodiert. Übrigens ist jeder andere Umlaut auch mit 65533, 65533 kodiert. 

Vielleicht sollte ich noch erwähnen, daß das Java-Programm direkt unter Debian auf dem Server läuft. 

Ich habe jetzt noch testweise ein -Dfile.encoding=utf8 beim Aufruf von Java eingefügt. 
Ergebnis: Die dezimale kodierung des Dateinamens ist identisch, einzig die Fehlermeldung hat sich leicht geändert: 
java.io.FileNotFoundException (/<pfad>/Plï¿½ï¿½ne.doc (No such file or directory)

bei -Dfile.encoding=windows-1251 gehts auch nicht.

Ich muß also Java irgendwie dazu bringen, die Dateinamen richtige einzulesen. Hat jemand noch eine Idee dazu?

Danke, Mikes222


----------



## SlaterB (17. Mai 2011)

direkt weiterhelfen kann ich leider nicht, aber falls du dazu noch weiter testen willst:
wird die Datei gefunden wenn du direkt 'Pläne' im Quellcode hinschreibst?

wie sieht es aus wenn du das Programm eine Datei mit 'ä' erstellen läßt, 
wird diese dann bei direkter Angabe des Namens im Quellcode gefunden?,
ändert sich bei der list()-Behandlung etwas?

ändert sich für externe Programme wie Konsole etwas?

'Debian dateinamen umlaute' liefert übrigens manche Suchergebnisse wie
Betriebssysteme » Debian: locale, Umlaute, UTF-8 & Co. » RootForum Community » Forum
vielleicht noch weitere Suche wert

wenn die Konsole an sich schon streikt, dann eigentlich kein Java-Problem?


----------



## Mikes222 (17. Mai 2011)

Vielen Dank für Deine Hilfe. 

Der entscheidende Hinweis war der letzte Satz, daß das Problem eventuell bereits auf OS-Ebene auftritt. 

Analog zu diesem Thread debianforum.de &bull; Thema anzeigen - SSH und Umlaute habe ich nun die locales installiert und auf de-de.UTF8 eingestellt. 

Jetzt gehts. 

Mikes222


----------

