解压缩ZIP文件 中文乱码的问题

前两天测试测出解压zip文件,出现中文乱码问题

系统是安卓6.0的,然而我们那个zip工具类是用JDK里面的一套ZIP相关类,在这套API里面,设置编码格式相关的方法都要求在API24以上(含24),就是说要求安卓7.0以上才能用。


系统版本是不可能提高了,所以用了Apache下面的一套zip相关API.然后就是把gbk格式写死了。

为什么这么做呢,windows压缩默认是gbk格式(同事和我自己的就是),所以都是中文,那就写定gbk吧 

如果产品卖到国外,基本也没有中文,即使他们utf-8压缩了,只要是英文,用gbk解压,一样不会是乱码。

 

 


在windows下,将名称含有中文的文件或目录,用winRAR制作一个demo.zip文件,运行上面代码会发现抛异常。这是因为中文windows环境下,操作系统默认的字符集是GBK,但是ZipFile只能识别UTF-8格式。所以当zip文件中含有中文(但不是UTF-8编码)的时候,java的 ZipFile就会报错。

 

这个问题在JDK1.7及其之后,解决这个问题是很简单的。JDK提供了构造函数,允许我们指定zip文件的字符集。

public ZipFile(String name, Charset charset) throws IOException  

如果在JDK1.6或之前,那么可以使用ant.jar中提供的org.apache.tools.zip.ZipFile,使用方式跟JDK1.7中的ZipFile很相似。

 

 


版权声明:本文为hnlgzb原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。