java – 使用带有I18N文件名的WinZIP解压缩文件?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 使用带有I18N文件名的WinZIP解压缩文件?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1770字,纯文字阅读大概需要3分钟。
内容图文
![java – 使用带有I18N文件名的WinZIP解压缩文件?](/upload/InfoBanner/zyjiaocheng/798/e7a58695a34f45c39295315774cbdcd8.jpg)
人们这些天用WinZIP创建他们的ZIP档案,它允许国际化(即非拉丁语:西里尔语,希腊语,中文,你命名)文件名.
可悲的是,尝试解压缩这样的文件会导致麻烦:
UNIX解压缩创建垃圾命名文件和目录,如“®£¤©¤¥èì”.
Java及其jar命令在这些档案上失败了.
是否有一种可通过的方式以编程方式解压缩这些文件? UNIX或Java.
解决方法:
DotNetZip支持zipfiles中文件名的unicode和任意编码,用于读取或写入zip.
这是一个.NET库.对于Unix的使用,您需要使用Mono作为先决条件.
如果zipfile是由WinZip正确构造的,换句话说,如果它符合the zip spec from PKWare,则在解压缩时指定编码不需要做任何特殊工作.根据zip规范,zipfile中有两种支持的文件名编码:UTF-8和IBM437.在zip元数据中指定使用这些编码中的一个或另一个,并且任何zip库都可以检测和使用它.在阅读兼容的zip时,DotNetZip会自动检测到它.像这样:
using (var zip = ZipFile.Read("thearchive.zip"))
{
foreach (var e in zip)
{
// e.FileName refers to the name on the entry
e.Extract("extract-directory");
}
}
有些存档程序可以生成“不符合”的拉链w.r.t.编码. WinRar是一个 – 它将创建一个zip,其文件名以计算机上使用的默认编码进行编码.在上海,它将使用cp950,而在冰岛,还有其他东西,在里斯本,还有其他东西.这里“不合规”的优点是Windows资源管理器将打开并正确显示这种拉链中的i18n化文件名.换句话说,“不合规”通常是人们想要的,因为Windows(还没有?)支持UTF-8 zip文件.
(这都与zipfile中使用的编码有关,而不是zip文件中包含的文件中使用的编码)
zip规范不允许在zip元数据中指定任意文本编码.换句话说,如果在创建zip时使用cp950,那么提取逻辑需要“知道”在解压缩时使用cp950 – zip文件中没有任何内容包含该信息.此外,当然,用于以编程方式提取的zip库必须支持任意编码.据我所知,Java的zip库没有. DotNetZip呢.像这样:
using (ZipFile zip = ZipFile.Read(zipToExtract,
System.Text.Encoding.GetEncoding(950)))
{
foreach (ZipEntry e in zip)
{
e.Extract(extractDirectory);
}
}
DotNetZip还可以使用任意编码创建zip文件 – “不兼容”的拉链.
DotNetZip是免费的,开源的.
内容总结
以上是互联网集市为您收集整理的java – 使用带有I18N文件名的WinZIP解压缩文件?全部内容,希望文章能够帮你解决java – 使用带有I18N文件名的WinZIP解压缩文件?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。