JAVA 解压缩带中文名的文件,文件夹乱码问题

来源:互联网 发布:最新软件开发工具 编辑:程序博客网 时间:2024/06/07 02:12

    关于这个在网上找了很多资料,今天终于把这个问题解决了

 

    由于JAVA ZIP类,在解压缩文件的时候将文件名称,或者文件夹名称均转换成UTF8编码,这种方法对于英文字符没影响,但是对于亚洲地区的字符

在解压缩时就会出现乱码。解压缩软件并不支持UTF-8编码。

    在网上主要有2种解决这个问题方法,一种是调用ANT包里面的类,一种就是修改源代码。由于现在的工作需要,故选择的第二种方案

 

    1.首先找到JDK文件下的SRC.ZIP文档解压出来。找到java.util.zip.ZipInputStream 和 java.util.zip.ZipOutputStream类。

       通过修改这2个类,可以解决问题。

    2. 先看 ZipInputStream 类中 private void readLOC()方法

        找到ZipEntry e = createZipEntry(getUTF8String(b, 0, len));

        改为以下代码:

        ZipEntry e = null;
        try {
            if (System.getProperty("file.encoding").toUpperCase().equals(
                    "UTF-8"))
                e = createZipEntry(getUTF8String(b, 0, len));
            else
                e = createZipEntry(new String(b, 0, len, System
                        .getProperty("file.encoding")));
        } catch (Exception byteE) {
            e = createZipEntry(getUTF8String(b, 0, len));
        }

 

        再看ZipOutputStream 类

 

        在这个类中,有很多地方都调用了 getUTF8Bytes()方法;

        将调用这个方法代码改为以下形式即可,

 

        byte[] nameBytes = null;
        try  {
          
           if (System.getProperty("file.encoding").toUpperCase().equals("UTF-8"))
                  nameBytes =getUTF8Bytes(e.name);
           else
                  nameBytes= e.name.getBytes(System.getProperty("file.encoding"));
       }
       catch(Exception byteE) {
          
           nameBytes=getUTF8Bytes(e.name);
       }

 

     3.代码部署

        找到JRE/LIB下的rt.jar文件,用WinZip解压,然后将这2个类放到相应的包下,并将rt.jar压缩,覆盖到原来位置

 

    这样在用JAVA ZIP包,解压缩带有中文名称

 

原创粉丝点击