Android中解压zip中文乱码处理
乱码原因分析
一般我们使用的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中文乱码处理相关推荐
- android zip中文乱码,Android中解压zip中文乱码处理
乱码原因分析 一般我们使用的Windows系统外部文件默认都是GBK编码方式,Mac系统默认的好像是UTF-8(同事的电脑就是,不知道其他人的是不是),Linux的没验证过,这里我讨论的是Window ...
- linux下mkdirs方法乱码,linux 解压zip中文乱码问题
本文用程序解决的的,有兴趣可以看一看,limux有解决中文乱码问题,,请去其他博客. 方法一:使用java importjava.io.File;importjava.io.FileOutputStr ...
- linux unzip乱码,Linux 中unzip解压时中文乱码的解决办法
Linux 中unzip解压时中文乱码的解决办法 Linux 中unzip解压时中文乱码的解决办法 当我们在linux中解压一个含有中文名字的压缩包如"资料.zip"时,如果直接使 ...
- python rarfile不支持中文路径_python使用zipfile解压文件中文乱码问题
中文在编程中真实后娘养的,各种坑爹,python3下中文乱码这个问题抓破了头皮,头疼.看了alex的文章,才有种恍然大悟的感觉(链接在底部). 一句话,就是转换成unicode,压缩前是什么编码,使用 ...
- android zip格式应用,Android 压缩解压zip文件
Android 压缩解压zip文件 上次写了个解压缩功能,但有局限性,比如压缩文件xx.zip 里包括子目录的情况下,执行上次解压缩的功能就不能实现我们想要的效果,于是在网上参考了一下java的解压缩 ...
- 【基础操作】ubuntu解压zip文件乱码
原文:https://www.cnblogs.com/pipci/p/10114527.html Ubuntu18.04 解压zip文件乱码的解决方法 在Ubuntu的系统下解压zip文件的时候居然出 ...
- Linux服务器中解压zip包
Linux服务器中解压zip包 Linux下解压zip文件,就一个命令行. Unzip [文件名] 示例: unzip {you file name} 我现在要解压datamaster.zip这个文件 ...
- Linux中解压zip包的命令是什么?
Linux系统里的zip是一种创建压缩存档文件的常用方式,同时也是一种传统的文件归档文件格式,那么Linux中解压zip包的命令是什么?Linux解压zip包的命令是:unzip,该命令主要用于查看和 ...
- java解压中文乱码_java解压文件中文乱码怎么处理
上次利用java自动的java.util.zip.ZipEntry和??java.util.zip.ZipFile来解压zip文件,今天发现程序在读取解压文件时居然报了空指针异常,debug程序后发现 ...
最新文章
- Python 测试开发从入门到高手成长之路
- 关于界面软件测试点,电子商务网站--界面测试的测试点
- [asp]统计在线人数情况
- windows iis 部署 django项目
- 95-38-150-Buffer-CompositeByteBuf
- android系统应用程序,Android调用系统应用程序
- Nodejs开发框架Express3.0开发手记
- CCF NOI1036 进制转换
- List遍历的三种方式
- 解决无法加载虚拟仿真实验unity3d插件的“failed to update unity web player”问题2019年12月27日
- 计算机视觉是否已经进入瓶颈期?
- 计算机技术与高中英语教学整合,计算机技术与高中英语课程整合的探讨(多媒体英语教学系列论文十篇).doc...
- linux x86软件改arm,x86程序移植到arm上
- maven项目中的pom文件依赖关系
- Linux开发板实现 NTP时间获取
- BootstrapTable的列排序怎么搞
- vue树形权限菜单_基于Vue的树形菜单之两种方式实现
- PDF文件如何编辑?这两种方法是我一直在用的
- 第一个小项目——坦克大战
- libsvm 2.6 的代码注释(支持向量机的神作)