ZipInputStream (InputStream, Charset) dekodiert den ZipEntry-Dateinamen falsch
Java 7 soll ein altes Problem beim Entpacken von Zip-Archiven mit anderen Zeichensätzen als UTF-8 beheben. Dies kann vom Konstruktor erreicht werdenZipInputStream(InputStream, Charset)
. So weit, ist es gut. Ich kann ein Zip-Archiv mit Dateinamen mit Umlauten entpacken, wenn ich explizit einen ISO-8859-1-Zeichensatz einstelle.
Aber hier ist das problem: beim iterieren über den stream mitZipInputStream.getNextEntry()
haben die Einträge falsche Sonderzeichen im Namen. In meinem Fall wird der Umlaut "ü" durch ein "?" Charakter, der offensichtlich falsch ist. Weiß jemand, wie man das behebt? OffensichtlichZipEntry
ignoriert dasCharset
des zugrunde liegendenZipInputStream
. Es sieht nach einem weiteren Zip-bezogenen JDK-Fehler aus, aber ich könnte auch etwas falsch machen.
...
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());
...
}