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
Was heisst "erscheinen"? Wie prᅵfst Du das?
Bye
Achim
> 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.
> 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
> Was heisst "erscheinen"? Wie pr�fst Du das?
z.B. unter Windows mit dem Explorer oder 7Zip �ffnen.
> und ZipInputStream(Inputstream, Charset) nutzen.
Gelesen wird mit den �blichen Zip-Packer, nict mit Java.
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.
>> 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.
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
Gibt es ne Routine Java-String -> 7bit Ascii?
Also
� -> ue
� -> ss
und keine Ahnung was noch so...
> 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?
>> 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.
> 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.
>> 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.
getBytes() kannst du nehmen :)
Gruss
Bernd
y
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
> 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.
> 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.
> getBytes() kannst du nehmen :)
:D
> Hm, also mein Java 1.5 ZipEntry hat keinen solchen ctor.
Ich mein 1.6
Das hat sich inzwischen ge�ndert, man kann sogar von Ant aus die
Kodierung der Dateinamen angeben (�ber "encoding").
>> 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.
> 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.
>> 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.
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.
>> 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.
> 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
>> 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 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.