Java8 java.lang.IllegalArgumentException: MALFORMEDの対処方法
環境
Java SE 1.8
Eclipse 4.14
エラー現象
Caused by: java.lang.IllegalArgumentException: MALFORMED
at java.util.zip.ZipCoder.toString(ZipCoder.java:58)
at java.util.zip.ZipFile.getZipEntry(ZipFile.java:583)
at java.util.zip.ZipFile.access$900(ZipFile.java:60)
Caused by: java.lang.IllegalArgumentException: MALFORMED
at java.util.zip.ZipCoder.toString(ZipCoder.java:58)
at java.util.zip.ZipFile.getZipEntry(ZipFile.java:583)
at java.util.zip.ZipFile.access$900(ZipFile.java:60)
Caused by: java.lang.IllegalArgumentException: MALFORMED at java.util.zip.ZipCoder.toString(ZipCoder.java:58) at java.util.zip.ZipFile.getZipEntry(ZipFile.java:583) at java.util.zip.ZipFile.access$900(ZipFile.java:60)
原因
日本語を含むファイル名の文字エンコードが MS932です
修正方法
ZIP解凍の実装側で対応する場合は Charset “MS932″を ZipInputStreamの第二引数に指定します。
使用例
Charset charset = Charset.forName("MS932");
InputStream is = 中略;
ZipInputStream zis = new ZipInputStream(is, charset);
ZipEntry entry = zis.getNextEntry();
Charset charset = Charset.forName("MS932");
InputStream is = 中略;
ZipInputStream zis = new ZipInputStream(is, charset);
ZipEntry entry = zis.getNextEntry();
Charset charset = Charset.forName("MS932"); InputStream is = 中略; ZipInputStream zis = new ZipInputStream(is, charset); ZipEntry entry = zis.getNextEntry();