2012-08-06 61 views
0

字符集问题,我有一个上传zip的功能。在我的项目ZipEntry.getName()

当用户上传任何压缩,我的系统中提取文件并显示文件夹结构,用户。

如果zip文件包含的文件具有类似名称Õ.txt那么它将璧显示像O.txt。

ZipFile zipFile = new ZipFile(filePath, Charset.forName("UTF8")); 
Enumeration entries = zipFile.entries(); 
while(entries.hasMoreElements()) 
{ 

ZipEntry entry = (ZipEntry)entries.nextElement(); 
System.out.println(entry.getName()); 

} 

上面是我的代码来读取zip条目。

现在,当我试图让条目的名称,它会给我O.txt代替Õ.txt的。

我已经用JDK 7测试了这段代码,但结果相同。

我也曾尝试不同的编码类型等CP437,IBM437,ISO-8859-1和ISO-8859-1,但在结果没有变化。

这样的请求建议我可以在从zip文件中获取条目的时间支持所有的字符

感谢&问候 雅鼎

+0

雅鼎,我估计java的正确读取该文件的名称,但如果你看到输出的控制台不支持Unicode字符。如果您调试代码,您是否看到正确的名称? – Augusto 2012-08-06 12:12:45

+0

嗨 是的,我通过调试器也看到了这件事。 感谢和问候 montu v boda – 2012-08-06 14:17:54

+0

您是否尝试过使用Cp1252编码?它适用于ApacheCommons-compress库,它使用JDK6 http://stackoverflow.com/a/20523390/185565 – Whome 2013-12-11 15:41:25

回答

0

的方式似乎有可能是坏了你的环境和不一定是您访问ZIP文件的方式。这里有一个检查清单:

  • ZIP文件是否真的包含一个带有该名称的UTF-8编码条目?使用7-Zip等工具进行验证。
  • JVM使用正确的字符集吗?检查系统属性file.encoding。
  • 输出终端/窗口的编码是否与此设置相匹配?

毕竟,如果处理链的所有元素都使用正确的设置,结果将是正确的。

+0

我的问题是我如何知道zip文件的编码? 如果使用7zip的创建压缩文件并上传的文件在我的系统然后正常工作...... 你可以建议我什么我有如果zip文件通过任何工具进行的呢? 感谢和问候 – 2012-08-06 14:17:03

+0

ZIP文件只有两种有效的编码:CP437(按惯例标准)和UTF-8(按规范标准)。使用什么取决于创建ZIP文件的工具 - 并非所有工具都正确。 7-zip应该可以正常工作。在JSE 7之前,Java做错了(总是使用UTF-8,但没有在文件中设置适当的位标志)。有关详细信息,请参阅http://www.pkware.com/documents/casestudies/APPNOTE.TXT上的ZIP文件格式规范附录D. – 2012-08-06 17:59:52