`
songer4081
  • 浏览: 7951 次
  • 性别: 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 里已经有...

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

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

    java zip 打包

    使用org.apache.tools.zip.*打包,解决中文乱码问题,资源内含一简单实现和ant.jar(版本为1.9.2)

    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("正在备份网站..."); ...

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

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

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

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

    分离自Ant的ZIP包可解决中文文件名处理问题

    这个名是名离自ant原码的,由于java.util.zip处理中文文件名时有问题可以用这个包代替那个使用就不会有中文问题了,我加了一个ZipTool.java,这个就是一个示例文件和方法打包文件。 &lt;br&gt;特点: 一、自有原码不...

    ZLib + minizip实现ZIP文件压缩解压缩

    使用ZLib和minizip实现对文件夹(包括子文件夹)的压缩解压缩工具,vc6.0版

    ItextpdfboxPDFword生成和读取各种例子最详细的打包

    itext pdfbox 详细的例子,其中包含 读取 解析pdf wrod 生成画格子 以及解决中文乱码问题 很多例子打包成一起 详细的注释

    解决Unity的Webgl中InputField无法输入中文字符的问题.zip

    支持webgl中文输入

    java 实现打zip包

    本资源解决了中文乱码问题,还解决了打包文件夹中的含有空文件的问题。 本资源是从网上下载,然后进行测试,发现一些问题,然后修复,然后在测试,基本没有问题,比较适合项目使用

    java 下载文件 压缩且删除源文件(支持文件夹与文件)

    1、指定文件可下载并且服务器端会删除此文件。 2、指定文件夹(文件夹中必须有一个文件),程序会自动的压缩文件为 zip,然后下载删除源文件与压缩文件...注意一点:中文的文件名会出现乱码(解决方案:导入ant.jar)

    Teleport Ultra-网站小偷绿色版.zip

    输入网址可以打包整个源网站,包括js文件、html文件、css文件以及引用的图片,部分网站由于编码或者加密原因可能会导致部分文件乱码,但大部分网站都是可以轻松还原的

    ApkTool,安卓逆向工具

    解包 : 拿到 APK 文件 , 如果按照 zip 格式解压出来 , xml 文件都是乱码 ; APK 文件打包时 , 会将 xml 文件进行压缩转为二进制文件 , 以减小体积 ; 解包时 , 必须使用 ApkTool 解包工具 , 将二进制数据格式的 xml ...

    SingleFile网页另存为插件.zip

    chrome浏览器插件,可以把网页打包到文本进行保存,非常好用,相对于各种笔记的网页简报功能更加好用,可以防止html保存不全乱码等问题。

    nsis-3.0.3.2.7z

    使用electron-builder打包时必不可少的文件,请放在类似C:\Users\11596\AppData\Local\electron-builder\Cache\nsis\nsis-3.0.3.2的文件夹中!

    《Java Web开发与实战--Eclipse+Tomcat+Servlet+JSP整合应用》.(刘伟,张利国).[PDF].zip

    上传、java mail和分页显示、web编程中文乱码问题及解决方案、应用程序的打包和部署等。书中还深入讲解了客户端验证框架jsvalidation、在线文本编辑器fckeditor和apache commons的一些类库等功能强大的实用开发工具...

    解决sqlplus删除方向键等动作乱码.rar

    Redhat4-update7本人亲测安装与使用的记录文档 两个需要用到的文件 readline-6.1.tar.gz rlwrap-0.18-1.i386.rpm 所以打包上传给其他同学使用。

    nsis-2.46.5-Unicode.zip

    nsis-2.46.5-Unicode-setup.exe在打包时能包含中文字符而不会出现乱码。使用与Win所有系统的打包。

    oracle自动备份shell脚本

    3、本脚本备份输出为zip打包文件,打包文件保存在zip目录下面。 4、本脚本支持备份log保存,log保存在logs目录下。 5、本脚本支持远程备份,备份命令使用的lftp,具体细节参照lftp的使用细则,安装过程中会提示操作...

Global site tag (gtag.js) - Google Analytics