国外做海报的网站免费杂志模板
国外做海报的网站,免费杂志模板,高水平高职院校 建设网站,把网站内容东西打出来怎么做zip4j解压zip时#xff0c;出现中文乱码#xff0c;看了下#xff0c;zip4j解压时支持设置文件编码#xff0c;我们只需要识别文件是不是utf-8编码#xff0c;如果不是utf-8就使用gbk解压#xff0c;但是这个判断没有100%准确的方式#xff0c;我试过通过字节流的bom标记…
zip4j解压zip时出现中文乱码看了下zip4j解压时支持设置文件编码我们只需要识别文件是不是utf-8编码如果不是utf-8就使用gbk解压但是这个判断没有100%准确的方式我试过通过字节流的bom标记去判断但是文件不一定有bom字节所以不适用。
网上最多的判断方式是使用第三方jar工具cpdetecpor或juniversalchardet但是这两种方式我都尝试过juniversalchardet无法判断出文件编码而cpdetecpor可以得到一个判断结果但是也不准确我经过一两天的探索查找找到了一个比较靠谱的方式 /*** 解压*/SneakyThrowspublic static void unzipFile(String zipFilePath, String destFilePath, String password) {ZipFile zipFile null;try {zipFile new ZipFile(zipFilePath);zipFile.setCharset(StandardCharsets.UTF_8);ListFileHeader headers zipFile.getFileHeaders();//判断文件名是否有乱码有乱码将编码格式设置成GBKif (isRandomCode(headers)) {log.info(使用UTF-8解压文件【{}】时乱码尝试使用GBK重新解压,zipFilePath);zipFile.close();zipFile new ZipFile(zipFilePath);zipFile.setCharset(Charset.forName(GBK));}if (!zipFile.isValidZipFile()) {throw new VerifyException(压缩文件不合法,可能被损坏.);}if (zipFile.isEncrypted() StringTool.isNotBlank(password)) {//加密zip且输入的密码不为空直接进行解密。zipFile.setPassword(password.toCharArray());}FileTool.createDir(destFilePath);zipFile.extractAll(destFilePath);}finally {IOUtils.closeQuietly(zipFile,null);}}private static boolean isRandomCode(ListFileHeader fileHeaders) {for (FileHeader fileHeader : fileHeaders) {boolean canEnCode Charset.forName(GBK).newEncoder().canEncode(fileHeader.getFileName());if (!canEnCode) {//canEnCode为true表示不是乱码。false.表示乱码。是乱码则需要重新设置编码格式return true;}}return false;}
我们先使用utf-8读取zip里面的文件名然后判断文件名是否能使用gbk进行编码如果不能我们就用utf-8解压如果gbk可以编码就使用gbk进行解压
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/87291.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!