Java 7は、UTF-8以外の文字セットを使用してzipアーカイブを解凍する際の古い問題を修正することになっています。これはコンストラクターによって実現できますZipInputStream(InputStream, Charset)
。ここまでは順調ですね。ISO-8859-1文字セットを明示的に設定すると、ウムラウトを含むファイル名を含むzipアーカイブを解凍できます。
ただし、ここに問題があります。を使用してストリームを反復処理するZipInputStream.getNextEntry()
と、エントリの名前に間違った特殊文字が含まれます。私の場合、umlaut「ü」は「?」に置き換えられます。明らかに間違っている文字。誰かがこれを修正する方法を知っていますか?明らかに、その基礎となるZipEntry
のを無視します。さらに別のzip関連のJDKバグのように見えますが、私も何か間違ったことをしている可能性があります。Charset
ZipInputStream
...
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());
...
}