乱码原因分析

一般我们使用的Windows系统外部文件默认都是GBK编码方式,Mac系统默认的好像是UTF-8(同事的电脑就是,不知道其他人的是不是),Linux的没验证过,这里我讨论的是Windows下打包的zip文件。
Java中自带的ZipEntry解压缩的编码方式是UTF-8,而且没有可以自定义编码方式的接口,所以当我们使用UTF-8编码去解压缩GBK编码的文件的时,解压缩出来的中文部分当然是乱码,所以Mac上打包的zip用Java的自带解压缩接口解压出来是没有问题的。

解决方式

找到了问题所在,解决方式也就比较简单了,既然是编码方式不同导致的,那我们保证编码方式统一即可,压缩zip时系统编码很难改变,那我们就从解压缩的编码方式入手,自定义解压缩的编码。
Apache中是有完整的替代解决方式的,但是Apache的包相对于Android说有点偏大不适合于Android环境,我们只需要找到解压缩的那部分代码进行改造即可,我这里找到了一个改造好的解压缩替代包,测试可行。示例代码如下:

import com.file.zip.ZipEntry;
import com.file.zip.ZipFile;
/*** @param file      待解压文件* @param dir       解压后文件的存放目录* @throws IOException*/
public void unzip(File file, String dir) throws IOException {ZipFile zipFile = new ZipFile(file, "GBK");//设置压缩文件的编码方式为GBKEnumeration<ZipEntry> entris = zipFile.getEntries();ZipEntry zipEntry = null;File tmpFile = null;BufferedOutputStream bos = null;InputStream is = null;byte[] buf = new byte[1024];int len = 0;while (entris.hasMoreElements()) {zipEntry = entris.nextElement();// 不进行文件夹的处理,些为特殊处理tmpFile = new File(dir + zipEntry.getName());if (zipEntry.isDirectory()) {//当前文件为目录if (!tmpFile.exists()) {tmpFile.mkdir();}} else {if (!tmpFile.exists()) {tmpFile.createNewFile();}is = zipFile.getInputStream(zipEntry);bos = new BufferedOutputStream(new FileOutputStream(tmpFile));while ((len = is.read(buf)) > 0) {bos.write(buf, 0, len);}bos.flush();bos.close();}}
}

改造后的ZipEntry.jar包的下载地址:http://download.csdn.net/detail/huyongl1989/9120755

欢迎访问我的独立博客:http://ittiger.cn

Android中解压zip中文乱码处理相关推荐

  1. android zip中文乱码,Android中解压zip中文乱码处理

    乱码原因分析 一般我们使用的Windows系统外部文件默认都是GBK编码方式,Mac系统默认的好像是UTF-8(同事的电脑就是,不知道其他人的是不是),Linux的没验证过,这里我讨论的是Window ...

  2. linux下mkdirs方法乱码,linux 解压zip中文乱码问题

    本文用程序解决的的,有兴趣可以看一看,limux有解决中文乱码问题,,请去其他博客. 方法一:使用java importjava.io.File;importjava.io.FileOutputStr ...

  3. linux unzip乱码,Linux 中unzip解压时中文乱码的解决办法

    Linux 中unzip解压时中文乱码的解决办法 Linux 中unzip解压时中文乱码的解决办法 当我们在linux中解压一个含有中文名字的压缩包如"资料.zip"时,如果直接使 ...

  4. python rarfile不支持中文路径_python使用zipfile解压文件中文乱码问题

    中文在编程中真实后娘养的,各种坑爹,python3下中文乱码这个问题抓破了头皮,头疼.看了alex的文章,才有种恍然大悟的感觉(链接在底部). 一句话,就是转换成unicode,压缩前是什么编码,使用 ...

  5. android zip格式应用,Android 压缩解压zip文件

    Android 压缩解压zip文件 上次写了个解压缩功能,但有局限性,比如压缩文件xx.zip 里包括子目录的情况下,执行上次解压缩的功能就不能实现我们想要的效果,于是在网上参考了一下java的解压缩 ...

  6. 【基础操作】ubuntu解压zip文件乱码

    原文:https://www.cnblogs.com/pipci/p/10114527.html Ubuntu18.04 解压zip文件乱码的解决方法 在Ubuntu的系统下解压zip文件的时候居然出 ...

  7. Linux服务器中解压zip包

    Linux服务器中解压zip包 Linux下解压zip文件,就一个命令行. Unzip [文件名] 示例: unzip {you file name} 我现在要解压datamaster.zip这个文件 ...

  8. Linux中解压zip包的命令是什么?

    Linux系统里的zip是一种创建压缩存档文件的常用方式,同时也是一种传统的文件归档文件格式,那么Linux中解压zip包的命令是什么?Linux解压zip包的命令是:unzip,该命令主要用于查看和 ...

  9. java解压中文乱码_java解压文件中文乱码怎么处理

    上次利用java自动的java.util.zip.ZipEntry和??java.util.zip.ZipFile来解压zip文件,今天发现程序在读取解压文件时居然报了空指针异常,debug程序后发现 ...

最新文章

  1. Python 测试开发从入门到高手成长之路
  2. 关于界面软件测试点,电子商务网站--界面测试的测试点
  3. [asp]统计在线人数情况
  4. windows iis 部署 django项目
  5. 95-38-150-Buffer-CompositeByteBuf
  6. android系统应用程序,Android调用系统应用程序
  7. Nodejs开发框架Express3.0开发手记
  8. CCF NOI1036 进制转换
  9. List遍历的三种方式
  10. 解决无法加载虚拟仿真实验unity3d插件的“failed to update unity web player”问题2019年12月27日
  11. 计算机视觉是否已经进入瓶颈期?
  12. 计算机技术与高中英语教学整合,计算机技术与高中英语课程整合的探讨(多媒体英语教学系列论文十篇).doc...
  13. linux x86软件改arm,x86程序移植到arm上
  14. maven项目中的pom文件依赖关系
  15. Linux开发板实现 NTP时间获取
  16. BootstrapTable的列排序怎么搞
  17. vue树形权限菜单_基于Vue的树形菜单之两种方式实现
  18. PDF文件如何编辑?这两种方法是我一直在用的
  19. 第一个小项目——坦克大战
  20. libsvm 2.6 的代码注释(支持向量机的神作)

热门文章

  1. 三星显示器的触摸按键是热感应的~
  2. OpenFOAM-v2006重叠网格挖洞问题研究以及修正——网上有相同问题的同行以及他们的解决办法
  3. 愿与你一起看尽人世间的繁华
  4. linux find name命令详解
  5. iTunes 安装出错解决
  6. 5. 对称symmetries
  7. 学习笔记26-- 在solidwork里面绘制世界环境,制作成gazebo的.world世界文件基本方法
  8. Hexo个人免费博客(四) 部署到Coding.net
  9. html css 隐藏div显示,css如何隐藏div?
  10. 最经典幽默短信大收藏