# Zip umlaute



## Brezensalzer (12. Jan 2012)

Hallo,

ich verwende Java 6 und möchte zip-Archive entpacken.
Dies funktioniert grundsätzlich, allerdings bin ich auf das allbekannte Problem der Zeichencodierung (z.B. Umlaute) gestoßen. Leider kann ich nicht auf Java 7 umsteigen, was natürlich alles vereinfachen würde.

Nach diversem durchstöbern bin ich auf folgende Lösungen gestoßen:
- Ant
- TrueZip
- jazzlib
...

Würde gerne einen Ratschlag bekommen, welche von diesen oder noch zusätzlichen das eleganteste für dieses Problem ist.

Gruß


----------



## irgendjemand (12. Jan 2012)

hat die zip-datei selbst umlaute im dateinamen oder die dateien innerhalb des zip ?

allgemein : man sollte NIE umlaute verwenden da diese in aller regel OS-abhängig codiert werden ...

normalerweise solltest du aber über die enumeration ganz normal auf die einzelnen elemente zugreifen


----------



## Brezensalzer (12. Jan 2012)

Beides: also Dateiname und innerhalb der Datei.

Du hast schon recht, dass man normalerweise keine Umlaute verwenden sollte. Ich finde aber trotzdem, dass man diesen Fall untersuchen und eine Lösung finden muss. In meinem Fall kann ich nicht ausschließen, dass Umlaute nicht verwendet werden. Aber das ist von Anwendung zu Anwendung unterschiedlich.

Ich hab mich aktuell für die Apache Bibliothek entschieden (org.apache.commons.archivers.zip.*).

Für alle, die Java 7 verwenden können die Standardlibrary benutzen.


----------



## irgendjemand (14. Jan 2012)

hmm .. wenn du nicht ausschließen kannst das die quell-daten umlaute enthalten *gleich welcher art* solltest du dir gedanken darüber machen warum diese files überhaupt umlaute enthalten ...
wenn diese von einer anderen software stammen sollte man den entwickler *schalgen* das er sich darum nicht gekümmert hat ...
wenn diese daten von usern stammen *welche mit unter so wenig plan von der materie wie ne scheibe brot haben* sollte man diese vorher darauf hinweise das man keine umlaute verwenden sollte ...

die letzte sehr drastische methode : alles was "sonderzeichen" enthält schlicht blockieren / ignorieren ...
meine begründung : warum sollte man sich mit schlechtem input herumschlagen wenn es für sowas klar definierte vorgaben gibt ? *es ist zwar richtig das ein deutscher das grund-prinzip des rechner erfunden hat *konrad zuse* ... aber da der moderne mist überwiegend aus dem englisch-sprachigen raum *vorzugsweise USA* stammt sollte man sich auf den zeichen-vorat der englischen sprache beschränken* ...

aber mal ne gegenfrage : warum ist kein wechsel auf Java7 möglich ? vorgaben vom arbeitgeber / uni / schule ? dann sollte man deren it-abteilung mal stecken warum ein update mehr vorteile als nachteile hat ... *ich find sowas immer wieder ur-komisch : große unternehmen mit vergleichsweise großen IT-abteilungen die es nicht auf die reihe bekommen in ihrer thin-client software welche zentral vom server läuft das update einzuspielen ... dann macht man halt mal ne viertel stunde kaffee pause ... länger sollte sowas nicht dauern*


----------



## California (14. Jan 2012)

> meine begründung : warum sollte man sich mit schlechtem input herumschlagen wenn es für sowas klar definierte vorgaben gibt ? *es ist zwar richtig das ein deutscher das grund-prinzip des rechner erfunden hat *konrad zuse* ... aber da der moderne mist überwiegend aus dem englisch-sprachigen raum *vorzugsweise USA* stammt sollte man sich auf den zeichen-vorat der englischen sprache beschränken* ...



Das ist so blöd, das es fast schon wieder gut ist. Die "Grundprinzipien des Rechners" stammen von  Carl Friedrich Gauss (Deutscher, Dualsystem), George Boole (Engländer, Aussagenlogik) und Charles Babbage (Engländer, "Analytical Machine") und wenn man weitergeht, noch von Joseph-Marie Jacquard (Franzose, erste "programmierbare" Maschine). Das war alles im 18. und 19. Jahrhundert. Zuse und Co. hatten als erste die *technischen* Möglichkeiten, Computer zu bauen.

Und ich als Deutscher wehre mich dagegen, von irgendeinem trolligen Hanswurst (der sich ja wohlweislich schon anonym gemeldet hat) vorgeschrieben zu bekommen, das man die in unserer Sprache üblichen Zeichen nicht benutzen soll. Sag das mal zu einem Spanier oder Franzosen...

So, jetzt @TO und zum Problem: 
Schon mal bein Öffnen der Streams das Encoding geprüft? Wenn Du Daten neu schreibst, solltest Du UTF-8 verwenden, damit ist auch die erste Einlassung unseres trolligen Herrn "irgendjemand" erledigt, weil UTF-8 eben nicht systemabhängig, sondern international genormt und auf (fast) allen Rechnern verfügbar ist. Und kann deutsche Umlaute genausogut wie französische oder spanische Akzente.
Wahrscheinlich hast Du aber bereits Daten vorliegen. Hier musst Du halt das Encoding rausfinden, in dem diese geschrieben sind. Guckst Du : Zeichensalat ? Wikipedia.


----------



## irgendjemand (14. Jan 2012)

wenn man sich mit einem rechner beschäftigt muss man leider dessen einschränkungen hinnehmen ...
und dazu zählt nunmal auch das im allgemeinen sonderzeichen *wie deutsche umlaute oder z.b. ganze sprachen wenn man mal ans kyrillische denkt* speziell codiert werden müssen ...
das geht leider noch auf die anfänge zurück als zeichen noch mit ASCII in 7bit codiert wurden *wesshalb DEL heutzutage immernoch auf 0x7F rumgeistert* ...

leider sind auch alle modernen systeme davon betroffen da solche "fehler" über die zeit immer wieder kopiert wurden ...

wenn du wirklich so ergeizig bist und der maschine "deutsch" beibringen willst ... dann mach dich doch mal daran ein komplett neues system zu entwickeln *hardware , code-tabellen , OS , etc* ...
du wirst festestellen : du müsstest ALLES neu machen ... wenn du nicht *zumindest über umwege* auf alte sachen welche diesen "fehler" haben zurückgreifen willst ...
und meinst du nicht auch das es da etwas einfacher ist sich diesen umständen zu beugen und einfach umlaute bei solchen dingen weg zu lassen ?

ich mein : was passiert wissen wir : mach dir mal den spass eine datei mit einem "deutschen" namen zu erstellen und diese von einem WIN system via FTP auf einen unix-server zu laden ... das chaos ist vorprogrammiert : undschiedliche encodings / charsets und schon ist der datei-name zerstört ...
*ja , jetzt kann man argumentieren das heutzutage eigentlich alles auf unicode laufen sollte ... aber speziell windows hält sich da ja bekannter maßen auch in seiner neuesten fassung *Win7* immer noch nicht daran*


----------



## Empire Phoenix (14. Jan 2012)

Also mein linxu server hat damit keine probleme, wozu gibt es die automatische umcodierung(die der ftp erledigt) der Dateinamen von cp1252 nach utf8 und zurück auch sonst.


----------



## California (14. Jan 2012)

Empire Phoenix hat gesagt.:


> Also mein linxu server hat damit keine probleme, wozu gibt es die automatische umcodierung(die der ftp erledigt) der Dateinamen von cp1252 nach utf8 und zurück auch sonst.



Genau ;-)


----------



## Empire Phoenix (14. Jan 2012)

Man könnte theoretisch auch erst alle Dateinamen angucken und auf aufälligkeiten wie das a1/4 zeichen oder ähnliches durchsuchen und dann entsprechend als failback eine manuelle Zeichenconvertierung vornehmen.
(Bzw im simplesten fall einfach alle nicht a-z0-9 durch _ ersetzen und beim einlesen der entpackten datein analog selbiges machen mit den namen.)


----------

