项目由GBK转成UTF-8 遇到原有解析zip发现中文文件名称乱码问题

net.lingala.zip4j

zip4j

1.3.2

package com.multek.ebuy.utils;

import net.lingala.zip4j.model.FileHeader;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.nio.charset.Charset;

import java.util.Enumeration;

import java.util.List;

import java.util.zip.ZipEntry;

import java.util.zip.ZipFile;

//import net.lingala.zip4j.core.ZipFile;

//import net.lingala.zip4j.model.FileHeader;

public class ZipUtil {

/**

* 解压

* @param zipPath

* @param descDir

* @return

*/

public static boolean decompressZip(String zipPath, String descDir) {

File zipFile = new File(zipPath);

boolean flag = false;

File pathFile = new File(descDir);

if (!pathFile.exists()) {

pathFile.mkdirs();

}

ZipFile zip = null;

try {

System.setProperty("sun.zip.encoding", System.getProperty("sun.jnu.encoding"));

// zip = new ZipFile(zipFile, Charset.forName("UTF-8"));//防止中文目录,乱码

String encoding = getEncoding(zipPath);

zip = new ZipFile(zipFile, Charset.forName(encoding));//防止中文目录,乱码

for (Enumeration entries = zip.entries(); entries.hasMoreElements(); ) {

ZipEntry entry = (ZipEntry) entries.nextElement();

String zipEntryName = entry.getName();

InputStream in = zip.getInputStream(entry);

//指定解压后的文件夹+当前zip文件的名称

String outPath = (descDir + "/" + zipEntryName).replace("/", File.separator);

//判断路径是否存在,不存在则创建文件路径

File file = new File(outPath.substring(0, outPath.lastIndexOf(File.separator)));

if (!file.exists()) {

file.mkdirs();

}

//判断文件全路径是否为文件夹,如果是上面已经上传,不需要解压

if (new File(outPath).isDirectory()) {

continue;

}

//保存文件路径信息(可利用md5.zip名称的唯一性,来判断是否已经解压)

OutputStream out = new FileOutputStream(outPath);

byte[] buf1 = new byte[2048];

int len;

while ((len = in.read(buf1)) > 0) {

out.write(buf1, 0, len);

}

in.close();

out.close();

}

flag = true;

//必须关闭,要不然这个zip文件一直被占用着,要删删不掉,改名也不可以,移动也不行,整多了,系统还崩了。

zip.close();

}catch (Exception e) {

e.printStackTrace();

}

return flag;

}

// public static void decompressZip(String source, String target, String targetName) throws Exception {

// try {

// File file = new File(source);

// if (!file.exists() || file.isDirectory()) {

// throw new Exception("将要解压文件不存在或路径不正确!");

// }

//

// file = new File(target + File.separator + targetName);

// if (!file.exists()) {

// file.mkdirs();

// }

// ZipFile zipfile = new ZipFile(source);

// if (!zipfile.isValidZipFile()) {

// throw new Exception("压缩文件不合法,可能被损坏.");

// }

// zipfile.setFileNameCharset("UTF-8");

zipfile.setFileNameCharset("GBK");

// zipfile.extractAll(target + File.separator + targetName);

// } catch (Exception e) {

// e.printStackTrace();

// throw e;

// }

//

//

// }

// public static void unZip(String zipPath, String destDir) throws Exception {

// ZipFile zipFile = new ZipFile(zipPath);

// zipFile.setFileNameCharset(getEncoding(zipPath));

// zipFile.extractAll(destDir);

// }

@SuppressWarnings("unchecked")

private static String getEncoding(String path) throws Exception {

String encoding = "GBK";

net.lingala.zip4j.core.ZipFile zipFile = new net.lingala.zip4j.core.ZipFile(path);

zipFile.setFileNameCharset(encoding);

Listlist = zipFile.getFileHeaders();

for (int i = 0; i < list.size(); i++) {

FileHeader fileHeader = list.get(i);

String fileName = fileHeader.getFileName();

if (isMessyCode(fileName)) {

encoding = "UTF-8";

break;

}

}

return encoding;

}

private static boolean isMessyCode(String str) {

for (int i = 0; i < str.length(); i++) {

char c = str.charAt(i);

// 当从Unicode编码向某个字符集转换时,如果在该字符集中没有对应的编码,则得到0x3f(即问号字符?)

// 从其他字符集向Unicode编码转换时,如果这个二进制数在该字符集中没有标识任何的字符,则得到的结果是0xfffd

if ((int) c == 0xfffd) {

// 存在乱码

return true;

}

}

return false;

}

}

https://blog.csdn.net/qq_34122822/article/details/90902815

java model 中文乱码_Java解压zip 解决编码和中文乱码问题相关推荐

  1. java zip解压 中文_java解压ZIP 解决中文乱码 (GBK和UTF-8)

    java解压ZIP 解决中文乱码 (GBK和UTF-8) 工具使用 : zip4j GitHub : zip4j 版本 : 2.2.8 Maven : net.lingala.zip4j zip4j ...

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

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

  3. python打包出现乱码_python解压zip包中文乱码解决方法

    乱码得原因: 由于ZipFile模块导出遇到中文解码不对,windows上会出现,linux是否会出现不知道没测试过. 解决方式: 1. 搞个文件名引射表(不太方便,少量文件夹套用时候还可以) 2. ...

  4. java解压zip代码_Java解压zip文件(文本)压缩包

    说明:由于我们的日志收集到指定服务器上,会按天压缩成一个zip格式的压缩包,但是有时候需要对这些日志进行处理,人工解压在处理,显示对于大量的日志处理是不行的(效率太低),所以还是要采用程序自动解压效率 ...

  5. linux解压文件名乱码,linux下解压zip文件时,文件名乱码的解决(转载)

    转自:http://blog.sina.com.cn/s/blog_6261f8690101c1gx.html windows下的zip文件,在linux下解压时,经常会出现文件名乱码的情况. 主要原 ...

  6. java判断zip包的编码格式_java解压zip包出现乱码

    解决思路: 首先判断需要解压的文件是否存在或路径是否正确,接着判断路径是否存在,若不存在则创建路径,然后判断压缩文件是否合法,最后设置文件名称编码为"GBK"即可. 免费在线教学视 ...

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

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

  8. java解压zip异常_java解压zip文件示例

    若是使用Java自带的压缩工具包来实现解压缩文件到指定文件夹的功能,因为jdk提供的zip只能按UTF-8格式处理,而Windows系统中文件名是以GBK方式编码的,所以如果是解压一个包含中文文件名的 ...

  9. Java实现文件压缩与解压[zip格式,gzip格式]

    原文:http://www.cnblogs.com/visec479/p/4112881.html#3069573 Java实现ZIP的解压与压缩功能基本都是使用了Java的多肽和递归技术,可以对单个 ...

最新文章

  1. Windows下编译tensorflow-gpu教程
  2. Silverlight学习笔记之文字特效之ImageBrush
  3. shopnc 商城源码阅读笔记--开篇概述
  4. Spring Boot AOP记录用户操作日志
  5. cmd命令操作Mysql数据库,命令行操作Mysql
  6. c语言位运算符怎么用,傻傻分不清
  7. 西门子45亿美元转型,“卖冰箱”到“卖VR”
  8. android package.xml,文件没问题的情况下not read packageName from xxx\AndroidManifest.xml?
  9. 这7个web前端开发写代码软件,你过用几个?
  10. springBoot+Vue导出Excel
  11. php mysql购物系统_基于PHPMySQL 的网上购物系统设计与实现
  12. BAT机器学习面试1000题系列大集合整理(320)
  13. Golang(3)CentOS7系统安装Go语言
  14. linux 双显卡 黑屏 amd,彻底解决AMD显卡win10开机黑屏问题
  15. 企业数据治理体系一文读懂
  16. 亲朋好友都能看懂的区块链
  17. 计算机毕业论文致谢,计算机软件毕业论文致谢词
  18. 把php数据转成json格式转换,php将从数据库中获得的数据转换成json格式并输出的方法...
  19. 苹果微信多开_苹果手机微信双开,微信多开有哪些可以推荐的?
  20. android设计架构之MVC、MVP、MVVM的理解

热门文章

  1. wso2_使用WSO2 ESB进行邮件内容过滤
  2. 最大字段和_使对易失性字段的操作原子化
  3. Centos 7 安装Mysql5.7
  4. 皮一皮:中国好男友!!!
  5. 盘点 IDEA2020.3 那些炫酷的插件,超级好用的那种
  6. 每日一皮:这张图送给正在努力改Bug的你
  7. Netty 解决粘包和拆包问题的四种方案
  8. 最华丽的 Kubernetes 桌面客户端:Lens
  9. cmake重新编译matlab,ubuntu系统下cmake 编译matlab中mex文件
  10. 湘潭大学c语言答案,湘潭大学生c语言课后习题答案.doc