Charset Encoding für Dateinamen

  • Themenstarter Themenstarter Mikes222
  • Beginndatum Beginndatum
M

Mikes222

Gast
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:
Java:
		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
 
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?
 
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
 
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?
 
Zuletzt bearbeitet von einem Moderator:

Zurück
Oben