Java 7は、UTF-8以外の文字セットでZIPアーカイブを解凍するという古い問題を修正することになっています。これはコンストラクタZipInputStream(InputStream, Charset)
によって実現できます。ここまでは順調ですね。 ISO-8859-1文字セットを明示的に設定すると、ウムラウト付きのファイル名を含むzipアーカイブを解凍できます。ZipInputStream(InputStream、Charset)はZipEntryファイル名を誤ってデコードします
ここでは、問題があります。ZipInputStream.getNextEntry()
を使用してストリームを反復するとき、エントリの名前に間違った特殊文字が含まれています。私の場合、ウムラウト "ü"は "?"文字は明らかに間違っています。誰もがこれを修正する方法を知っていますか?明らかにZipEntry
は、その基礎となるZipInputStream
のCharset
を無視します。それはまだ別のzip関連のJDKバグのように見えますが、私は間違ったことをしているかもしれません。
...
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());
...
}
Java SE6のベストプラクティスは何ですか? (SE7へのアップグレード以外に): – basZero
SE6の場合:VMパラメータ 'zip.altEncoding'または' zip.encoding'を 'Cp437'または' ISO-8859-1'に設定してテストしましたが、両方が正しく読み取られませんでした – basZero
@ basZero:Apache Commons圧縮はうまく動作します。私はすぐに解決策を見つけませんでした。 – kriegaex