Ho un metodo che aggiunge inputStream a zip come una voce:Come aggiungere la voce zip con utf-8 nome per zip
private void addToZip(InputStream is, String filename) throws Exception {
try {
ZipEntry zipEntry = new ZipEntry(filename);
zos.putNextEntry(zipEntry);
byte[] bytes = new byte[1024];
int length;
while ((length = is.read(bytes)) >= 0) {
zos.write(bytes, 0, length);
}
zos.closeEntry();
} finally {
IOUtils.closeQuietly(is);
}
}
Il problema si verifica quando il nome del file contiene un carattere UTF-8 come AE. .. Nel file zip verrà salvato come ?????
e quando lo decomprimo in Ubuntu 12.10 sembra: N├бstroje
anziché Nástroje
.
Per questo esempio ho usato JDK6 ma jdk7 ora ho anche provato:
zos = new ZipOutputStream(fos, Charset.forName("UTF-8"));
ma senza successo.
Ho anche provato Apache Commons Zip e impostato la codifica, ma anche senza successo.
Quindi, come posso aggiungere questo file con i simboli unicode nel nome file per comprimere?
Ho avuto lo stesso problema qualche tempo fa. Ho usato il set di caratteri non Unicode, specifico per la lingua locale (Cp866). E ha funzionato bene. –
quindi anziché Nástroje dovrei salvare la voce come Nastroje? Questa è l'ultima opzione ... come la converti? – hudi
L'applicazione era destinata all'esecuzione nel sistema Windows. E ho usato la codifica 'Cp866', per supportare i caratteri russi nei nomi di file negli archivi zip e visualizzarli correttamente quando visualizzo il contenuto del file zip. E ha funzionato. Esiste un set di caratteri non unicode che supporta i simboli della lingua? Prova ad usarlo, invece di utf-8. –