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

时间:2009-12-30 00:06:38

标签: java unicode zip internationalization localization

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

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

有关导致此问题的原因以及如何解决此问题的任何想法?

我知道this bug,但我仍需要针对此案例的解决方法。

3 个答案:

答案 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提到了这种方法,但从未使用它。

相关问题