# Sonderzeichen Dateiname



## MiMa (21. Nov 2012)

Hallo,

ich habe mir eine kleines Tool geschrieben, das Dateinamen umorganisiert.

Jetzt habe ich das Problem, das die Dateien Umlaute und Sonderzeichen enthalten. :lol:
Diese Dateien habe ich auf dem Mac mit dem Textedit geschrieben und auf einem Linux NAS gespeichert. Gespeichert wurden die Dateien als REINEN TEXT.

Anschliessend habe ich das Gesamte Verzeichnis auch mal auf dem Desktop gehabt um zu sehen, ob es da Änderungen gibt. 

Um das Problem an zu gehen, habe ich ein Testprogramm gemacht, worin ich gezielt das Problem lokalisieren und hoffentlich beheben kann.

Zusätzlich habe ich noch eine Ausgabe.txt schreiben lassen um zu sehen ob es wirklich das ist, was auch in der Konsole angezeigt wird.

Code und Testdateien habe ich angehangen.

Datei:     Die schöne Prinzessin (2008).divx
Ausgabe: Die scho��ne Prinzessin (2008).divx

Der Gedanke der mir kam, war der die Sonderzeichen um zu schreiben wie "o��" =>"ö".
Oder muss das so sein "o��" => "&ouml;", na denke ich eher Weniger in einem Dateinamen, da ist ja dann da Kaufmännische Und drin ?

Wäre das die richtige Richtung ?

Danke

Mi


----------



## Trolllllll (21. Nov 2012)

mach daraus ein 
	
	
	
	





```
oe
```
 und alles ist gut, das passt immer ;-)


----------



## MiMa (21. Nov 2012)

Ja das würde ich gerne, aber das möchte ich nicht von Hand machen, da es ein paar Tausend Dokumente sind.

Deshalb wollte ich das in meinem Transformer Tool mit einbinden.

Mi.


----------



## SlaterB (21. Nov 2012)

es wird nicht ganz eine Frage klar, jedenfalls mir,
stellst du nur dein fertiges Programm vor oder gibt es noch Probleme?

� sieht nicht grad schön aus in Dateinamen, 
erstelle richtige Dateinamen mit ö, evtl. auf mehreren Betriebssystemen, 
lies das ein, vergleiche Zeichen für Zeichen mit der �-Variante, 
dann sollte doch recht klar sein, was schlecht ist und wie zu ersetzen?


----------



## MiMa (21. Nov 2012)

Nein ich Stelle hier nicht mein Programm vor.

Ich wollte nur wissen, wie man die Umlaute und Sonderzeichen umbenennen kann. Das ist das letzte Problem um das ich mich kümmern muss, bevor ich das Programm auf meine Dateien los lasse.

Da im Mac Finder, auf der Synology DisksStation in der FileStation die Umlaute richtig Dargestellt werden, ist es mir nur durch die Ecpilse IDE aufgefallen.

Da ich auch nicht genau weiss wofür das Zeichen mit der raute und dem Fragezeichen steht, nehme ich mal an das es so vielleicht funktionieren könnte ??


```
if (arrayDokument.toString().contains("o��"))
   {
      System.out.println("Das falsche ö wurde lokalisiert");   			
      
      // Name vom Pfad trennen
      dateiObjekt.setFilmName(arrayDokument.getName().toString());

      // Ersetzen der Zeichen mit Stringoptionen "o��" nach "oe"

      // Film Namen in der Konsole ausgeben
      System.out.println("Der Film Name ist: " + dateiObjekt.getFilmName());
}
```

Mi


----------



## FArt (21. Nov 2012)

Mit welchem Encoding / Locale laufen die beteiligten Systeme?


----------



## Trolllllll (21. Nov 2012)

Schau dir das mal an String (Java 2 Platform SE v1.4.2)


----------



## Melfis (21. Nov 2012)

Ersetz mal dein FileWriter durch:


```
Writer w = new OutputStreamWriter(new FileOutputStream("./DEIN_PFAD/Ausgabe.txt"), System.getProperty("file.encoding"));
      	  BufferedWriter ausgabeObjekt = new BufferedWriter(w);
```

Und ein wenig Lektüre dazu:
Verwendung von Character Sets in Java

MFG Melfis


----------



## MiMa (21. Nov 2012)

So ich habe jetzt das hier mal geschrieben


```
if (arrayDokument.toString().contains("o��"))
{
   // Austauschen der Zeichen
   dateiObjekt.setFilmName(arrayDokument.toString().replace("o��", "oe"));
   
   // Ausgeben auf die Konsole
   System.out.println("Dokument " + i + " " + dateiObjekt.getFilmName());
             
   // Als File-Objekt umwandeln
   File filmZiel = new File(dateiObjekt.getFilmName());  
                  		
   // Datei umbenennen
   arrayDokument.renameTo(filmZiel);
                    	}
```

In der Konsole erhalte ich die richten Informationen:

Dokument 2 /Users/michael/Desktop/Transformer/Mediathek/Die scho��ne Prinzessin (2008).divx
Dokument 2 /Users/michael/Desktop/Transformer/Mediathek/Die schoene Prinzessin (2008).divx

Aber das umbennen klappt nicht ?

So jetzt schau ich mal zu euren Tipps.

Wo kann ich denn das Encoding nachschauen (Mac) ?



Danke 
Mi


----------



## Melfis (21. Nov 2012)

Ich glaube ich hab deine Frage noch nicht richtig kapiert. Was von den beiden folgenden Dingen möchtest du machen?

1. Du hast eine "fehlerhafte" Textdatei erstellt und möchtest diese Textdatei einlesen und in das Systemspezifische Charset "übersetzten".

2. Dein Programm im 1# Posting soll die Textdatei richtig erstellen.

MFG Melfis


----------



## MiMa (21. Nov 2012)

@Melfis

Ja genau das soll es.
Ob die Datei Fehlerhaft ist ????
Auf dem Mac erstellt, und richtig dargestellt, auf dem NAS auch richtig dargestellt.
Ich werde mal Windows öffnen und dann mal auf die Datei schauen.

Ich habe es jetzt soweit geschafft es in der Konsole richtig hin zu biegen, aber das umbennen der Datei ist immer noch ein Problem.

Hier die aktuelle Version des Testprogrammes.

Vielen Dank

Mi


----------



## Melfis (21. Nov 2012)

Klappt es nicht wie ich es im Post #8 beschrieben habe?

Du kannst auch statt 
	
	
	
	





```
System.getProperty("file.encoding")
```
 "UTF-8" benutzen, oder einen anderen Charset deiner wahl.


----------



## FArt (21. Nov 2012)

Melfis hat gesagt.:


> Klappt es nicht wie ich es im Post #8 beschrieben habe?
> 
> Du kannst auch statt
> 
> ...



Wichtig ist nur, dass es überall das selbe ist... beim lesen einer Datei, beim schreiben der Datei und bei der Anzeige.

Das Encoding des Terminals (Konsole) bekommst du raus, indem du auf der Konsole "locale" eingbibst.


----------



## Melfis (21. Nov 2012)

@Fart Das ist mir bewusst. Jedoch ließt Java (soweit ich weiß) die Dateinamen/Orderstruktur mit dem systemspezifeschen Charset ein. Intern Arbeitet Java mit Unicode d.h. ich muss mich nur um den Charset der Ausgabe kümmern. Und als gemeinsamer kleinster Nenner könnte UTF-8 herhalten.

[EDIT]Natürlich muss man die Textdatei Datei auch mit einem kompatiblen Editor öffnen. z.B. unterstützt der Windows-Editor folgende Zeichensätze:"Ansi","UTF-8", "Unicode" [/EDIT]


----------



## MiMa (21. Nov 2012)

So ich habe mal das ganze jetzt auch mal unter Windows in das Mediathek Verzeichnis hinein geschaut.
Alles bestens. Die Umlaute der "Die schöne Prinzessin (2008).divx" wurden auf allen System gleich korrekt  angezeigt.

Mein Terminal gibt mit folgende Informationen aus:



> imac:~ michael$ locale
> LANG="de_DE.UTF-8"
> LC_COLLATE="de_DE.UTF-8"
> LC_CTYPE="de_DE.UTF-8"
> ...



Also kann es nur noch an Eclipse liegen.

Die Writer Einstellungen hatte ich nicht ausprobiert, weil ich diesen wieder entfernt hatte.
Dazu ist noch zu sagen, das die Ausgabe.txt Datei diese raute Fragezeichen Symbole enthielt.
Diese waren auf dem Mac und in Windows gleich.

Wenn ich in Eclipse Juno eine Datei erzeuge und diese Speichere, Fragt er immer nach dem Zeichensatz und ich wähle dann UTF-8 aus.

Mi


----------



## Melfis (21. Nov 2012)

Wo und wie schreibst/ließt du deine Text-Datei. Bitte poste mal das Code-Stück.
Von der Umwandlung von einzelnen Zeichenfolgen würde ich dir dringend abraten!


----------



## MiMa (21. Nov 2012)

Der Code inkl. Beispieldateien sind im Anhang, aktueller Stand.

Es funktioniert soweit alles, bis auf das implementierte Sonderzeichen.
Mit dem Sonderzeichen funktioniert die Umbenennung des der Datei nicht.

Die Dateien, die habe ich von Hand erstellt und sind nur ein Entwicklungsersatz.
Deshalb gibt es nur ein paar davon.

Mi


----------



## FArt (21. Nov 2012)

MiMa hat gesagt.:


> Dazu ist noch zu sagen, das die Ausgabe.txt Datei diese raute Fragezeichen Symbole enthielt.
> Diese waren auf dem Mac und in Windows gleich.


Nur zur Vollständigkeit (noch einmal): es kann sein, dass man alles richtig macht, aber das anzeigende Programm (zur Kontrolle) wieder ein eigenes Encoding verwendet und somit "nur" die Kontrolle falsch ist. Auf der Konsole zieht also die Einstellung des Terminals oder die des Betriebsystems (kann überschrieben sein!). Texteditoren können andere Vorlieben haben (eigene Konfiguration, Fallback auf Betriebsystem, evtl. der Versuch ein passendes Encoding zu ermitteln).

In einer längeren Verarbeitungs- und Transportkette müssen einfach alle das gleiche Encoding verwenden. Ich habe mehr als einen gesehen, der lange Zeit Fehler gesucht hat um festzustellen, dass der eigentliche Prozess funktioniert, nur die Sichtkontrolle daneben ging.

Hat was von Heisenbergsche Unschärfe und Schrödingers Katze ;-)


----------



## MiMa (21. Nov 2012)

In Eclipse konnte ich noch in den Einstellungen/Editor/Spelling Endcoding einstellen.
Dort stand ASCII US und habe den jetzt auf UTF-8 eingestellt.

Warum die Datei nicht umbenannt wird, hängt damit zusammen, das ich vor dem Umbenennen nocht Prüfe, ob die Datei auch wirklich vorhanden ist. Wenn nicht, wird dieser Codeabschnitt nicht ausgeführt, wenn ja dann macht er es.

Ich denke das es mit dem Umlaut zusammenhängt und bei der Prüfung prüft, sieht anders aus, ist also nicht da und überspringt dann den Code.

Werde den Writer noch mal einbauen und schauen was passiert.

Mi


----------

