Java 7旨在解决使用字符集不是UTF-8的zip归档文件时的旧问题。这可以通过构造函数ZipInputStream(InputStream, Charset)
来实现。到目前为止,一切都好。当明确设置ISO-8859-1字符集时,我可以解压包含umlauts文件名的zip文件。
但是问题在于:当使用ZipInputStream.getNextEntry()
迭代流时,条目名称中的特殊字符不正确。在我的情况下,umlaut "ü"被替换为"?"字符,这显然是错误的。有人知道如何解决吗?显然,ZipEntry
忽略了其底层ZipInputStream
的Charset
。看起来又是JDK中与zip相关的一个bug,但我可能也做错了什么。
...
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());
...
}
zip.altEncoding
或zip.encoding
设置为Cp437
或ISO-8859-1
,但两者都无法正确读取。 - basZero