我正在使用Java创建文件管理器(仅Windows)。在NIO和ZipFileSystem的帮助下,用户可以在内部zip文件中导航到本地文件夹。
一切正常-zip内包含某些“特殊”字符的某些文件除外,例如名为GlkEspañol.dll的文件。
如果我使用ZipFileSystem的默认编码(UTF-8)-至少在某些情况下,对于包含具有这些特殊字符的文件的zip文件,我将获得此例外:
Exception in thread "JavaFX Application Thread" java.lang.IllegalArgumentException: MALFORMED[1]
at jdk.zipfs/jdk.nio.zipfs.ZipCoder.toString(ZipCoder.java:90)
at jdk.zipfs/jdk.nio.zipfs.ZipCoder$UTF8.toString(ZipCoder.java:64)
at jdk.zipfs/jdk.nio.zipfs.ZipFileSystem.getString(ZipFileSystem.java:938)
at jdk.zipfs/jdk.nio.zipfs.ZipPath.toString(ZipPath.java:603)
因此,我没有其他选择,只能回退到ZipFileSystem的Windows-1252编码。现在我没有例外,但文件名看起来像垃圾。
我与其他几个文件管理器(虽然不是基于Java的)管理了相同的zip文件,并且它们显示的文件还不错。
还有其他人遇到过同样的问题吗?我仍然不确定这是Java错误还是什么。除了回退到Windows-1252之外,我还能做些什么呢?