ZipInputStream (InputStream, Charset) decodifica o nome do arquivo ZipEntry falsamente
O Java 7 deve corrigir um problema antigo ao descompactar arquivos zip com conjuntos de caracteres diferentes de UTF-8. Isso pode ser conseguido pelo construtorZipInputStream(InputStream, Charset)
. Por enquanto, tudo bem. Eu posso descompactar um arquivo zip contendo nomes de arquivos com umlauts neles quando definir explicitamente um conjunto de caracteres ISO-8859-1.
Mas aqui está o problema: ao iterar sobre o fluxo usandoZipInputStream.getNextEntry()
, as entradas têm caracteres especiais errados em seus nomes. No meu caso, o trema "ü" é substituído por um "?" personagem, que é obviamente errado. Alguém sabe como consertar isso? ObviamenteZipEntry
ignora oCharset
do seu subjacenteZipInputStream
. Parece mais um bug do JDK relacionado ao zip, mas eu também posso estar fazendo algo errado.
...
zipStream = new ZipInputStream(
new BufferedInputStream(new FileInputStream(archiveFile), BUFFER_SIZE),
Charset.forName("ISO-8859-1")
);
while ((zipEntry = zipStream.getNextEntry()) != null) {
// wrong name here, something like "M?nchen" instead of "München"
System.out.println(zipEntry.getName());
...
}