关于这个在网上找了很多资料,今天终于把这个问题解决了
由于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();
            else
                   nameBytes= .getBytes(System.getProperty("file.encoding"));
        }
        catch(Exception byteE) {
            
            nameBytes=getUTF8Bytes();
        }
3.代码部署
找到JRE/LIB下的rt.jar文件,用WinZip解压,然后将这2个类放到相应的包下,并将rt.jar压缩,覆盖到原来位置
这样在用JAVA ZIP包,解压缩带有中文名称
 
 
                     
            
        













 
                    

 
                 
                    