关于这个在网上找了很多资料,今天终于把这个问题解决了
由于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包,解压缩带有中文名称