Desidero comprimere un file su Windows (7) con ZipOutputStream
. Il problema è che il nome del file (e anche il contenuto del file file) contiene anche caratteri greci ("ГП0000660040140521_a.txt
", Gamma e Pi). Il codice per comprimere il file che uso:"IllegalArgumentException: UNMAPPABLE [1]" durante la compressione di un file con caratteri greci
ZipOutputStream zipOs = new ZipOutputStream(
new FileOutputStream("c:\\temp\\test.zip"), Charset.forName("cp737")
);
File sourceFile = new File("C:/Path/To/File/ГП0000660040140521_b.txt");
String entryName = sourceFile.getName().replaceAll("\\\\", "/");
ZipEntry entry = new ZipEntry(entryName);
zipOs.putNextEntry(entry);
...
...
Ma l'ultima riga (la putNextEntry
chiamata) ottengo un IllegalArgumentException
:
java.lang.IllegalArgumentException: UNMAPPABLE[1]
at java.util.zip.ZipCoder.getBytes(ZipCoder.java:95)
at java.util.zip.ZipOutputStream.writeLOC(ZipOutputStream.java:407)
at java.util.zip.ZipOutputStream.putNextEntry(ZipOutputStream.java:221)
presumo ci deve essere qualcosa di sbagliato con la mappatura carattere tra Greco e UTF-8 ... Qual'è il modo giusto per comprimere un file con caratteri greci nel nome del file?
EDIT
Se uso "utf-8" come set di caratteri il file zip può essere creato, ma il nome del file zippato è sbagliato: "ðôðƒ0000660040140521_a.txt
" (i caratteri greci mancano)
Cosa fa il metodo createZipEntry? – agad
@agad: Il mio errore! Ho corretto il codice. Grazie. – Steffen
Quando dici che il nome è "sbagliato", come lo stai verificando esattamente? Quale strumento stai usando per ispezionare il file ZIP e sei sicuro che quello strumento stia usando la stessa codifica per interpretare i nomi dei file come li hai usati quando li hai creati? –