我有一个名称包含日文字符的目录,我需要使用java.util.zip中的zip utils将其写入zip文件。编写zip文件成功,但是当我用Windows的内置压缩文件实用程序或7-Zip打开生成的zip文件时,名称中带有日文字符的目录显示为一堆垃圾字符。我的系统上安装了日语/东亚语言包 - 我可以使用日语名称创建目录,这不是问题。
有趣的是,如果我使用java.util.zip编写一个单独的脚本来读取生成的zip文件,那么目录名称是正确的,我可以将zip的内容提取到具有日文字符的相应命名目录中。但我不能使用我尝试过的商业拉链工具,这无疑是我们客户想要做的。
有关导致此问题的原因以及如何解决此问题的任何想法?
我知道this bug,但我仍需要针对此案例的解决方法。
答案 0 :(得分:3)
TrueZIP claims to do this better:
J2SE API总是使用UTF-8(八 用于输入的位Unicode字符集) 名称和评论而不是CP437 (a.k.a.IBM437,真正的IBM-PC 字符集),由...使用 来自PKWARE的事实上的标准PKZIP。 因此,您无法读取或写入 带有国际条目的ZIP文件 文件名,例如“täscht.txt” 在(南部)创建的ZIP文件中 德语。
[省略其他问题的描述]
TrueZIP库的开发是为了克服这些限制/缺点。
答案 1 :(得分:2)
奇迹确实发生了,而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)
答案 2 :(得分:1)
如果java.util.zip仍然表现为this post describes,我不确定它是否可行(使用内置类)。我之前看到Chilkat's Java Zip library提到了这种方法,但从未使用它。