Ich möchte eine Datei unter Windows (7) mit ZipOutputStream
zippen. Das Problem ist, dass der Dateiname (und auch der Dateiinhalt) auch griechische Zeichen enthält (" ГП0000660040140521_a.txt
", Gamma und Pi). Der Code zum Zippen der Datei, die ich verwende:
Aber in der letzten Zeile (der putNextEntry
Aufruf) bekomme ich IllegalArgumentException
:
Ich nehme an, dass irgendetwas mit der Zeichenzuordnung zwischen Griechisch und UTF-8 falsch sein muss ... Was ist der richtige Weg, um eine Datei mit griechischen Zeichen im Dateinamen zu komprimieren?
BEARBEITEN
Wenn ich "utf-8" als Zeichensatz verwende, kann die Zip-Datei erstellt werden, aber der Name der gezippten Datei ist falsch: " ðôðƒ0000660040140521_a.txt
" (die griechischen Zeichen fehlen)
Ich schrieb diese (späte) Antwort wegen der Kommentare von "Miso" und "Kriegax" meiner Frage.
Wenn ich mich recht erinnere, habe ich irgendwo gelesen, dass die UTF8-Unterstützung von Dateinamen in ZIP-Dateien eine der großen Schwachstellen von ZIP-Dateien ist (weil UTF-8 nicht offiziell vom ZIP-Standard unterstützt wird?!?). Möglicherweise sind es jetzt vorhandene Zip-Anwendungen, die UTF-8 in Dateinamen unterstützen.
Jedoch. In unserem Fall war es für uns in Ordnung, die griechischen Zeichen durch "normale" Zeichen ("a ... z") zu ersetzen, da die zu zipenden Dateien von einem Fiskaldrucker erzeugt wurden und das in jedem Fall nur ein griechisches Zeichen enthält : ein "PI" (nur ein Workaround ...).
Da ZipCoder
verwendet von ZipOutputStream
einen Mapper verwendet, der so konfiguriert ist, dass immer eine Ausnahme ausgelöst wird, wenn das Zeichen nicht zugeordnet werden kann, konvertierte ich den entryName zuerst selbst in den angegebenen Zeichensatz und dann durch Aufruf von ZipEntry entry = new ZipEntry(entryName)
. Sie können es zum Beispiel so machen:
Dies stellt sicher, dass alle nicht mischbaren Zeichen in Ersatzzeichen umgewandelt werden und keine Ausnahme gegeben ist.
Versuchen Sie dies und Sie werden wahrscheinlich einige Unicode-Steuerzeichen (die nicht mappbar sind) in der ursprünglichen Eingabe bemerken.
Tags und Links java character-encoding zipoutputstream