Java:ZipFileでjava.lang.IllegalArgumentException: MALFORMED
以下のようなエラーが発生することがある。
Exception in thread "main" java.lang.IllegalArgumentException: MALFORMED
at java.util.zip.ZipCoder.toString(ZipCoder.java:58)
at java.util.zip.ZipFile.getZipEntry(ZipFile.java:566)
at java.util.zip.ZipFile.access$900(ZipFile.java:60)
at java.util.zip.ZipFile$ZipEntryIterator.next(ZipFile.java:524)
at java.util.zip.ZipFile$ZipEntryIterator.nextElement(ZipFile.java:499)
at java.util.zip.ZipFile$ZipEntryIterator.nextElement(ZipFile.java:480)
at java.util.jar.JarFile$JarEntryIterator.next(JarFile.java:257)
at java.util.jar.JarFile$JarEntryIterator.nextElement(JarFile.java:266)
at java.util.jar.JarFile$JarEntryIterator.nextElement(JarFile.java:247)
at Main.main(Main.java:13)
単純にjava.util.zip.ZipCoder.toString(ZipCoder.java:58)のコードを見ればわかるのだが、Zipファイル(あるいはjar、War)に格納されたファイルの名称がUTF-8になっていないからである。深く追求していないが、日本語名称のファイルをWindows上でZIPにすると、MS932(シフトJIS)になってしまうようだ。
このために、UTF-8にしか対応していないZIPFileでエラーが発生してしまう。単純に日本語ファイル名をやめればよい。日本語ファイル名のままにしたい場合は、以下の方策が必要かもしれない(これも追求していない)。
- Zipファイル作成時にUTF-8で格納されるようにする。あるいはZipファイルを修正してUTF-8にする。
- java.util.zip.ZipCoderのコードを修正しUTF-8以外にも対応できるようにする。
ディスカッション
コメント一覧
まだ、コメントがありません