Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

ZipEntry mit Umlaut

506 views
Skip to first unread message

Chris Seidel

unread,
Jun 5, 2009, 12:53:38 PM6/5/09
to
Hallo,

erzeuge ich einen java.util.zip.ZipEntry mit Umlaut erscheinen diese Entrys
im Zip ohne Umlaute, sondern mit irgendwelchen Sonderzeichen.

Wie l�se ich das Problem?

Danke


Achim Peters

unread,
Jun 5, 2009, 1:07:43 PM6/5/09
to
Chris Seidel wrote:
> erzeuge ich einen java.util.zip.ZipEntry mit Umlaut erscheinen diese Entrys
> im Zip ohne Umlaute, sondern mit irgendwelchen Sonderzeichen.

Was heisst "erscheinen"? Wie prᅵfst Du das?

Bye
Achim

Florian Weimer

unread,
Jun 5, 2009, 1:41:57 PM6/5/09
to
* Chris Seidel:

> erzeuge ich einen java.util.zip.ZipEntry mit Umlaut erscheinen diese Entrys
> im Zip ohne Umlaute, sondern mit irgendwelchen Sonderzeichen.

Apache Ant (sic) hat eine alternative Implementierung, die das wohl
l�sen soll.

Bernd Hohmann

unread,
Jun 5, 2009, 1:48:40 PM6/5/09
to
Chris Seidel schrieb:

> erzeuge ich einen java.util.zip.ZipEntry mit Umlaut erscheinen diese Entrys
> im Zip ohne Umlaute, sondern mit irgendwelchen Sonderzeichen.

Macht ja nix. Solange Du auf der gleichen Plattforma ein- und auspackst,
bleibt das konsistent.

Ansonsten:

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4820807
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4244499

und ZipInputStream(Inputstream, Charset) nutzen.

Bernd

--
Visit http://www.nixwill.de and http://www.spammichvoll.de
jean....@nixwill.de & bernado....@spammichvoll.de

Chris Seidel

unread,
Jun 5, 2009, 2:45:08 PM6/5/09
to
Achim Peters wrote:

> Was heisst "erscheinen"? Wie pr�fst Du das?

z.B. unter Windows mit dem Explorer oder 7Zip �ffnen.


Chris Seidel

unread,
Jun 5, 2009, 2:46:42 PM6/5/09
to
Bernd Hohmann wrote:

> und ZipInputStream(Inputstream, Charset) nutzen.

Gelesen wird mit den �blichen Zip-Packer, nict mit Java.


Chris Seidel

unread,
Jun 5, 2009, 2:48:03 PM6/5/09
to
Florian Weimer wrote:
> Apache Ant (sic) hat eine alternative Implementierung, die das wohl
> l�sen soll.

Den Hinweis kenn ich nur im Zsgh. damit, dass es gar nicht geht so ein Zip
mit Umlaut-Entrys zu erzeugen.
Stammt aber aus 1.4-Zeiten.


Bernd Hohmann

unread,
Jun 5, 2009, 3:01:44 PM6/5/09
to
Chris Seidel schrieb:

>> und ZipInputStream(Inputstream, Charset) nutzen.
>
> Gelesen wird mit den üblichen Zip-Packer, nict mit Java.

Dann Umlaute vorher konvertieren weil der Zip-Eintrag in ziplib nur
US-ASCII kann.

Bernd Eckenfels

unread,
Jun 5, 2009, 3:29:44 PM6/5/09
to
Chris Seidel <cse...@arcor.de> wrote:
> erzeuge ich einen java.util.zip.ZipEntry mit Umlaut erscheinen diese Entrys
> im Zip ohne Umlaute, sondern mit irgendwelchen Sonderzeichen.
>
> Wie l?se ich das Problem?

Das ist ein bekanntes sehr altes Java Problem bedingt durch die nativen
Klassen. Es gibt einen Bug bei Sun aber ich glaube er ist immer noch nicht
gefixed. Teilweise kannst du alternative ZIP Klassen nehmen, die das kᅵnnen.

Problem bei der Sache ist es gibt keine "norm" fᅵr das Encoding der
Eintrᅵge, und bei den Java Klassen kann man kein charset angeben.

Gruss
Bernd

Chris Seidel

unread,
Jun 5, 2009, 3:35:49 PM6/5/09
to
Bernd Hohmann wrote:
> Dann Umlaute vorher konvertieren weil der Zip-Eintrag in ziplib nur
> US-ASCII kann.

Gibt es ne Routine Java-String -> 7bit Ascii?

Also

� -> ue
� -> ss

und keine Ahnung was noch so...

Chris Seidel

unread,
Jun 5, 2009, 3:36:35 PM6/5/09
to
Bernd Eckenfels wrote:

> Das ist ein bekanntes sehr altes Java Problem bedingt durch die
> nativen Klassen. Es gibt einen Bug bei Sun aber ich glaube er ist
> immer noch nicht gefixed. Teilweise kannst du alternative ZIP Klassen

> nehmen, die das k�nnen.

Du meinst Ant?
Wie ist das mit der Geschwindigkeit im Ggs. zu native?


Bernd Hohmann

unread,
Jun 5, 2009, 4:25:42 PM6/5/09
to
Chris Seidel schrieb:

>> Dann Umlaute vorher konvertieren weil der Zip-Eintrag in ziplib nur
>> US-ASCII kann.
>
> Gibt es ne Routine Java-String -> 7bit Ascii?

Sowas hat "man" eigentlich selber in den eigenen Tools.

Chris Seidel

unread,
Jun 5, 2009, 4:54:32 PM6/5/09
to
Bernd Hohmann wrote:

> Sowas hat "man" eigentlich selber in den eigenen Tools.

Hm, ist doch'n "common case", warum also selbst bauen, wenn vorhanden?
Zumindest die Logik w�re interessant, gibt ja nicht nur Umlaute und �
au�erhalb von 7bit.

Ich vermute, ne regex w�rde weiterhelfen.


Bernd Hohmann

unread,
Jun 5, 2009, 5:05:48 PM6/5/09
to
Chris Seidel schrieb:

>> Sowas hat "man" eigentlich selber in den eigenen Tools.
>
> Hm, ist doch'n "common case", warum also selbst bauen, wenn vorhanden?

> Zumindest die Logik wäre interessant, gibt ja nicht nur Umlaute und ß
> außerhalb von 7bit.
>
> Ich vermute, ne regex würde weiterhelfen.

Du hast alle Punkte angeführt aus welchem Grund man eine wirklich
simple, schnell durchzuführende Aufgabe hoher Performanz in etwas
klobig, langsames und nicht wirklich generisch funktionierendes umsetzen
möchte.

Bernd Eckenfels

unread,
Jun 5, 2009, 6:04:52 PM6/5/09
to
Chris Seidel <cse...@arcor.de> wrote:
> Gibt es ne Routine Java-String -> 7bit Ascii?

getBytes() kannst du nehmen :)

Gruss
Bernd
y

Bernd Eckenfels

unread,
Jun 5, 2009, 6:06:19 PM6/5/09
to
Chris Seidel <cse...@arcor.de> wrote:
> Du meinst Ant?

Ja ant is einer und dann gibts noch irgendwas mit truezip. Ich hatte bei
allen das PRoblem dass sie nicht richtig mit streams konnten. Aber wie im
anderen Posting zu sehen scheint es inzwischen nen Kosntruktor mit encoding
zu geben.

Gruss
Bernd

Chris Seidel

unread,
Jun 5, 2009, 6:06:44 PM6/5/09
to
Bernd Hohmann wrote:

> Du hast alle Punkte angef�hrt aus welchem Grund man eine wirklich
> simple, schnell durchzuf�hrende Aufgabe hoher Performanz in etwas


> klobig, langsames und nicht wirklich generisch funktionierendes

> umsetzen m�chte.

Warum sollte eine fertige Routine klobig und langsam sein?
Die Regeln der Ersetzung d�rften doch ziemlich fix sein.

z.B. aus � macht man einfach nur ue und nicht sonstwas.


Chris Seidel

unread,
Jun 5, 2009, 6:09:11 PM6/5/09
to
Bernd Eckenfels wrote:


> Ja ant is einer und dann gibts noch irgendwas mit truezip. Ich hatte
> bei allen das PRoblem dass sie nicht richtig mit streams konnten.

Beim Schreiben?

> Aber wie im anderen Posting zu sehen scheint es inzwischen nen
> Kosntruktor mit encoding zu geben.

Hm, also mein Java 1.5 ZipEntry hat keinen solchen ctor.


Chris Seidel

unread,
Jun 5, 2009, 6:10:04 PM6/5/09
to
Bernd Eckenfels wrote:

> getBytes() kannst du nehmen :)

:D


Chris Seidel

unread,
Jun 5, 2009, 6:10:49 PM6/5/09
to
Chris Seidel wrote:

> Hm, also mein Java 1.5 ZipEntry hat keinen solchen ctor.

Ich mein 1.6


Florian Weimer

unread,
Jun 6, 2009, 2:35:13 AM6/6/09
to
* Chris Seidel:

Das hat sich inzwischen ge�ndert, man kann sogar von Ant aus die
Kodierung der Dateinamen angeben (�ber "encoding").

Bernd Hohmann

unread,
Jun 6, 2009, 2:48:21 AM6/6/09
to
Florian Weimer schrieb:

>> Den Hinweis kenn ich nur im Zsgh. damit, dass es gar nicht geht so ein Zip
>> mit Umlaut-Entrys zu erzeugen.
>> Stammt aber aus 1.4-Zeiten.
>

> Das hat sich inzwischen geändert, man kann sogar von Ant aus die
> Kodierung der Dateinamen angeben (über "encoding").

Das ist aber alles Makulatur wenn (wie der OP geschrieben hat) er das
mit einem beliebigen ZIP unpacker (unzip etc..) auspacken möchte.

Chris Seidel

unread,
Jun 6, 2009, 5:27:42 AM6/6/09
to
Bernd Hohmann wrote:

> Das ist aber alles Makulatur wenn (wie der OP geschrieben hat) er das

> mit einem beliebigen ZIP unpacker (unzip etc..) auspacken m�chte.

Wieso? Unter Windows mit dem eingebauten Zip fkt. Umlaute.


Florian Weimer

unread,
Jun 6, 2009, 6:08:55 AM6/6/09
to
* Bernd Hohmann:

>> Das hat sich inzwischen ge�ndert, man kann sogar von Ant aus die
>> Kodierung der Dateinamen angeben (�ber "encoding").


>
> Das ist aber alles Makulatur wenn (wie der OP geschrieben hat) er das

> mit einem beliebigen ZIP unpacker (unzip etc..) auspacken m�chte.

Wenn er das EFS-Bit setzt und UTF-8 nutzt, sollte es funktioniert.
Oder wenn er das Bit nicht setzt und CP437 verwendet.

Chris Seidel

unread,
Jun 6, 2009, 6:35:37 AM6/6/09
to

Ich fasse mal zusammen:

* Java selbst kann aufgrund der verwendeten zlib nur 7Bit Ascii in
ZipEntrys.
* Altenativ kann man andere Libs nutzen (z.B. aus Ant), weil man hier das
Encoding setzen kann.

Bernd Hohmann

unread,
Jun 6, 2009, 9:19:41 AM6/6/09
to
Florian Weimer schrieb:

>> Das ist aber alles Makulatur wenn (wie der OP geschrieben hat) er das

>> mit einem beliebigen ZIP unpacker (unzip etc..) auspacken möchte.


>
> Wenn er das EFS-Bit setzt und UTF-8 nutzt, sollte es funktioniert.
> Oder wenn er das Bit nicht setzt und CP437 verwendet.

Ich hab mal kurz in die Sourcen vom zlib reingeschaut, da war nix mit
EFS und auch nichts mit Unicode auf den ersten Blick.

Solange zlib das nicht eingebaut hat, wäre es dünnes Eis.

Tor-Einar Jarnbjo

unread,
Jun 6, 2009, 11:13:39 AM6/6/09
to
Chris Seidel schrieb:

> Warum sollte eine fertige Routine klobig und langsam sein?

> Die Regeln der Ersetzung dᅵrften doch ziemlich fix sein.

Nein. Die Regeln sind von Land zu Land u.U. sehr unterschiedlich und
einige Lᅵnder, z.B. Schweden haben nicht mal einheitliche "Regeln" wie
einheimische Sonderbuchstaben umgeschrieben werden sollen, sondern
nutzen je nach Verwendungszweck oder Mondphase unterschiedliche Verfahren.

Wenn man nicht Schnittstellen zu uralter oder schlecht geschriebener
Software hat, dᅵrfte es doch kaum Fᅵlle geben, wo sowas notwendig sein
sollte.

Gruᅵ, Tor

Bernd Hohmann

unread,
Jun 6, 2009, 12:56:25 PM6/6/09
to
Tor-Einar Jarnbjo schrieb:

>> Warum sollte eine fertige Routine klobig und langsam sein?

>> Die Regeln der Ersetzung dürften doch ziemlich fix sein.


>
> Nein. Die Regeln sind von Land zu Land u.U. sehr unterschiedlich und

> einige Länder, z.B. Schweden haben nicht mal einheitliche "Regeln" wie

> einheimische Sonderbuchstaben umgeschrieben werden sollen, sondern
> nutzen je nach Verwendungszweck oder Mondphase unterschiedliche Verfahren.

Abgesehen davon schätze ich, dass man für das Umsetzen von äöüß mit
einer Schleife (oder zur Not einem replace) in der Programmierung und
Ausführungsgeschwindigkeit schneller fertig ist als wenn man eine Regex
darauf ansetzt :-)

Florian Weimer

unread,
Jun 6, 2009, 6:15:09 PM6/6/09
to
* Bernd Hohmann:

> Florian Weimer schrieb:
>
>>> Das ist aber alles Makulatur wenn (wie der OP geschrieben hat) er das

>>> mit einem beliebigen ZIP unpacker (unzip etc..) auspacken m�chte.


>>
>> Wenn er das EFS-Bit setzt und UTF-8 nutzt, sollte es funktioniert.
>> Oder wenn er das Bit nicht setzt und CP437 verwendet.
>
> Ich hab mal kurz in die Sourcen vom zlib reingeschaut, da war nix mit
> EFS und auch nichts mit Unicode auf den ersten Blick.
>

> Solange zlib das nicht eingebaut hat, w�re es d�nnes Eis.

H�h?

zlib ist sowieso egal, was komprimiert wird. Beim ZIP-Format z�hlen
die Dateinamen nicht mal dazu. Will sagen: Du hast an der falschen
Stelle nachgeschaut.

Ich bezog mich sowieso auf den Hack in Apache Ant.

0 new messages