`
songer4081
  • 浏览: 8207 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

zip打包乱码问题

阅读更多
转载于 http://blog.sina.com.cn/s/blog_4b6f8d150100kyzc.html
由于项目里需要做一个将文件夹压缩的功能,由于文件夹中的文件都是中文名称,所以java.util.zip压缩后的文件名都是变成了“乱码”。

解决方法有二:

其一,修改源码

参考 http://nopainnogain.javaeye.com/blog/616436

其二,用ant.jar包里面的org.apache.tools.zip代替java.util.zip
import org.apache.tools.zip.ZipEntry;    
import org.apache.tools.zip.ZipOutputStream;    
public static void write(File path, File zipFile) throws IOException {    
   ZipOutputStream zip = new ZipOutputStream(new FileOutputStream(zipFile));    
       zip.setEncoding("GBK");  //这行代码就是解决中文文件名的关键  
        Util.write(path, path, zip);    
       zip.close();    
    }    
   
private static void write(File base, File path, ZipOutputStream zip) throws IOException {    
        URI rel = base.toURI().relativize(path.toURI());    
        if (path.isDirectory()) {    
            ZipEntry entry = new ZipEntry(rel.getPath());    
            entry.setUnixMode(755);    
            zip.putNextEntry(entry);    
            zip.closeEntry();    
            File[] files = path.listFiles();    
            for (File file : files) {    
                write(base, file, zip);    
            }    
        } else {    
            ZipEntry entry = new ZipEntry(rel.getPath());    
            entry.setUnixMode(644);    
            zip.putNextEntry(entry);    
            FileInputStream is = new FileInputStream(path);    
            zip.write(IOUtils.toByteArray(is));    
            is.close();    
            zip.closeEntry();    
        }    
    }  

参考http://www.javaeye.com/topic/349790

在 windows 下进行 zip,然后在 linux 下 unzip,中文的文件名会乱码。
网上一般的解决办法是重新编译 unzip 来绕过去。
我查了一下,可以通过 entry.setUnixMode 的方式,将 platform 设置为 Unix,如下:

Java代码
public void setUnixMode(int mode) {    
    // CheckStyle:MagicNumberCheck OFF - no point    
    setExternalAttributes((mode << 16)    
                          // MS-DOS read-only attribute    
                          | ((mode & 0200) == 0 ? 1 : 0)    
                          // MS-DOS directory flag    
                          | (isDirectory() ? 0x10 : 0));    
    // CheckStyle:MagicNumberCheck ON    
    platform = PLATFORM_UNIX;    
}   

这样在解压的时候,就不需要绕过去了。

分享到:
评论

相关推荐

    JDK ZipEntry压缩中文文件名乱码解决

    项目中碰到问题.jdk zipEntry 压缩中文文件名乱码  上网查了下,有两种方法,一种修改jdk ZipInputStream及ZipOutputStream 的源文件,比较麻烦,不建议此项.  第二种 就是拿来主义,因为 开源项目 Ant 里已经有...

    layui分页表格及日期乱码.zip

    总的来说,解决乱码问题通常需要从数据来源、传输过程、页面渲染和编码设置等多个角度来排查。通过以上步骤,基本可以解决layui组件中出现的乱码问题。在实际开发过程中,规范编码习惯和统一编码标准是避免这类问题...

    java zip 打包

    `java zip 打包`这个话题聚焦于如何使用Java来创建ZIP归档,以及如何处理中文文件名的乱码问题。Apache Ant的`ant.jar`库提供了强大的构建工具,它包含了一系列用于处理文件打包的实用程序,其中包括对ZIP格式的支持...

    ZipOutputStream 压缩文件以及乱码问题解决方案

    本文将深入探讨如何使用ZipOutputStream进行文件压缩,并解决可能出现的乱码问题。 首先,我们来看`ZipOutputStream`的基本用法。这个类继承自`FilterOutputStream`,提供了创建ZIP文件的功能。以下是一个简单的...

    android解压zip乱码处理(包括ant瘦身后的jar)

    在android开发中,有时候需要将文件打包成zip或将zip解压,如果直接用java.util.zip包下面的类会出现中文乱码,如果直接用org.apache.tools.zip(ant包中的压缩功能)会影响项目的编译时间; 故将ant包中文件瘦身,既...

    java zipentry.jar 解决解压失败问题

    ZIP是一种广泛使用的档案格式,它允许将多个文件和目录打包成一个单一的文件,以便于存储和传输。ZIP文件内部通常使用UTF-8编码来存储文件名和路径,但并非所有ZIP工具都遵循这个标准,有的可能使用本地操作系统默认...

    读取zip文件,不解压缩直接解析,支持文件名中文,解决内容乱码(还是以支付宝对账单为例)

    总之,读取ZIP文件并解析其中的中文文件名和内容,需要理解文件的编码原理,选择合适的库和方法,以及正确地处理可能出现的乱码问题。通过上述步骤,我们可以高效、准确地处理像支付宝对账单这样的数据,为数据分析...

    文件解压和压缩 解决中文乱码

    这里我们关注的是“文件解压和压缩”以及处理“中文乱码”的问题。在Java编程语言中,提供了多种库和工具来处理这些问题。 首先,`CompresszZipFile`是一个可能的自定义类或方法,它专门用于处理ZIP文件的解压。在...

    ZIP压缩和解压类

    ZIP是一种流行的文件存档格式,它允许将多个文件和目录打包成一个单一的文件。ZIP文件内部包含了一个或多个经过压缩的数据块,每个数据块对应源文件的一部分。ZIP支持多种压缩算法,如Deflate和BZip2,其中Deflate是...

    文本汉字解析乱码处理程序.zip

    在处理乱码问题时,这通常不会直接影响到文本编码,但在打包或发布软件时,可能需要考虑不同系统环境下的编码兼容性。 "obj"和"bin"目录是编译过程产生的中间文件和可执行文件。虽然它们不直接涉及编码问题,但...

    java压缩中文处理使用org.apache.tools.zip已经打包成jar

    java压缩中文处理使用org.apache.tools.zip已经打包成jar 只要放在LIB文件夹下,然后在JSP 或 JAVA 里引用即可。 *,java.io.*,org.apache.tools.zip.Zip" pageEncoding="GBK"%&gt; out.println("正在备份网站..."); ...

    AutoJS 4.1.1 打包插件.zip

    标题中提到的"AutoJS 4.1.1 打包插件.zip",指的是AutoJS的一个特定版本4.1.1的打包工具或插件。这个插件可能是用于将AutoJS脚本打包成独立的应用程序,使得用户可以分享或者在没有安装AutoJS环境的设备上运行这些...

    装界面乱码问题解决方法

    ### 装界面乱码问题解决方法 #### 知识点概述 在Linux系统中安装Oracle数据库时,可能会遇到安装界面出现乱码的问题。本文将详细介绍导致这一问题的原因及具体的解决步骤。 #### 问题背景 当我们在Linux环境下...

    java 打zip包

    2. **处理中文乱码**:在处理非ASCII字符,特别是中文字符时,可能出现乱码问题。解决这个问题的关键在于设置正确的编码。在创建`ZipEntry`时,需要指定文件名的编码,通常为`"UTF-8"`,例如:`new ZipEntry(new ...

    中文 乱码.rar 解决文档

    尝试使用支持多种编码的工具,如7-Zip,它通常能更好地处理中文乱码问题。你可以在设置中调整解压时使用的字符编码。 3. **修改文件名编码**:如果问题出在文件名上,可能需要手动修改文件的内部编码。可以使用支持...

    用java打zip包

    总结来说,通过Ant或直接使用Java API,我们都能实现创建ZIP文件并解决中文乱码问题。关键在于设置正确的编码(如UTF-8)以及正确使用`ZipOutputStream`。对于Ant,可以在任务中设置`encoding`属性;对于Java代码,...

    14本经典android开发教程【修正上一个文件乱码问题】

    修正上一个文件乱码问题,重传, 上一个文件: 14本经典android开发教程 http://download.csdn.net/detail/cleopard/5729507 另外 88个经典Android应用程序打包[源代码] ...

    错误归类学习.zip_ant脚本打包

    在本案例中,"错误归类学习.zip_ant脚本打包"的标题暗示了用户在使用Ant脚本来打包项目时遇到了问题,特别是涉及到调用Web服务(Webservice)时出现了错误。 描述中提到的“ant脚本打包的时候运行访问Webservice是...

    I18N.dll, I18N.CJK.dll 可用于Unity中文乱码问题

    可解决Unity工程打包 exe 后,执行出现中文乱码问题,只需放在...比如:Unity在编辑模式下调用 ICSharpCode.SharpZipLib.dll 解压zip文件时,zip文件中的中文名称不会有乱码问题,但打包为exe后却有中文乱码问题。

    org.apache.tools.zip.*和org.apache.commons.httpclient.*实现远程文件打包下载,支持中文文件名

    5. **处理中文文件名**:在写入ZIP条目时,确保正确设置文件名的编码,通常使用UTF-8,以避免乱码问题。 6. **关闭流**:下载完成后,关闭所有打开的输入/输出流,确保资源得到释放。 这个过程不仅实现了文件的...

Global site tag (gtag.js) - Google Analytics