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