Java ZipCoder异常

Java ZipCoder异常,java,nio,java-11,Java,Nio,Java 11,我正在用Java创建一个文件管理器(目前仅限Windows)。在NIO和ZipFileSystem的帮助下,用户可以在zip文件中导航,就像在本地文件夹中导航一样 一切正常——除了ZIP中包含一些“特殊”字符的某些文件,例如名为:GlkEspañol.dll的文件 如果我使用ZipFileSystem的默认编码(UTF-8),那么对于包含具有这些特殊字符的文件的zip文件,至少在某些情况下会出现这种例外: Exception in thread "JavaFX Application Threa

我正在用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 bug或者什么。有什么比退回到Windows-1252更好的方法吗?

那么zip显然不是用UTF-8编码创建的?自2007年以来,标准是使用UTF-8作为文件名,但Windows可能提出了自己的“标准”。Java应该几乎自动创建具有UTF-8名称的zip文件。您可以提供一些代码作为示例吗?我会看看我是否会在稍后创建一个有问题的zip文件的mcve。但是,每次我简单地调用
(Zip)Path.getFileName().toString()
,都会引发该异常。