前两天测试测出解压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很相似。