使用java.util.zip写入zip文件时,带有日文字符的文件名将变为垃圾。*

我有一个名称包含日文字符的目录,我需要使用java.util.zip中的zip utils将其写入zip文件。 编写zip文件成功,但是当我用Windows的内置压缩文件实用程序或7-Zip打开生成的zip文件时,名称中带有日文字符的目录显示为一堆垃圾字符。 我的系统上安装了日语/东亚语言包 – 我可以用日语名创建目录,所以这不是问题。

有趣的是,如果我编写一个单独的脚本来使用java.util.zip读取生成的zip文件,目录名称是正确的,我可以将zip的内容提取到具有日文字符的相应命名目录中。 但我不能使用我尝试过的商业拉链工具,这无疑是我们的客户想要做的。

关于导致这个问题的原因以及如何解决这个问题的想法?

我知道这个bug ,但我仍然需要针对这种情况的解决方法。

如果java.util.zip仍然像这篇文章描述的那样表现,我不确定它是否可能(使用内置类)。 我之前看到Chilkat的Java Zip库是一种让它工作的方法,但从未使用它。

TrueZIP声称这样做更好:

J2SE API始终使用UTF-8(八位Unicode字符集)作为条目名称和注释,而不是CP437(又名IBM437,真正的IBM-PC字符集),它由PKWARE的事实上的标准PKZIP使用。 因此,您无法在(南部)德语创建的ZIP文件中读取或写入具有国际条目文件名的ZIP文件,例如“täscht.txt”。

[省略其他问题的描述]

TrueZIP库的开发是为了克服这些限制/缺点。

确实发生了奇迹,Sun / Oracle确实修复了长期存在的bug / rfe:

现在可以[创建时设置文件名编码] [1] zip文件/流( 需要Java 7 )。

[1]: http : //download.java.net/jdk7/docs/api/java/util/zip/ZipOutputStream.html#ZipOutputStream (java.io.OutputStream,java.nio.charset.Charset)