ZipInputStream (InputStream, Charset) dekoduje błędnie nazwę pliku ZipEntry

Java 7 ma rozwiązać stary problem z rozpakowywaniem archiwów zip za pomocą zestawów znaków innych niż UTF-8. Można to osiągnąć dzięki konstruktorowiZipInputStream(InputStream, Charset). Jak na razie dobrze. Mogę rozpakować archiwum zip zawierające nazwy plików z umlautami, gdy jawnie ustawię zestaw znaków ISO-8859-1.

Ale oto problem: podczas iteracji nad strumieniem za pomocąZipInputStream.getNextEntry(), wpisy mają błędne znaki specjalne w swoich nazwach. W moim przypadku umlaut „ü” zostaje zastąpiony przez „?” postać, która jest oczywiście błędna. Czy ktoś wie, jak to naprawić? OczywiścieZipEntry ignorujeCharset jego instrumentu bazowegoZipInputStream. Wygląda na kolejny błąd JDK związany z zip, ale mogę też zrobić coś złego.

...
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());
    ...
}

questionAnswers(1)

yourAnswerToTheQuestion