我们的产品有一个导出功能,它使用ZipOutputStream压缩目录;但是,当您尝试压缩包含具有中文或日文字符的文件名的目录时,导出将无法正常工作.由于某种原因,压缩文件中的新文件的命名方式不同.以下是我们的压缩代码示例:

ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName));

out.setEncoding("UTF-8");

//program to add directory to zip

//program add/create file to zip

out.close();

我的导入算法也是用Java构建的,即使文件/目录名中包含中文/日文字符,也可以正确导入压缩文件.

Zipfile zipfile = new ZipFile(zipPath, "UTF-8");

Enumeration e = zipFile.getEntries();

while (e.hasMoreElements()) {

entry = (ZipEntry) e.nextElement();

String name = entry.getName();

....

zip软件的程序是否在解压缩UTF-8编码文件时遇到问题,或者是否有一些特殊需要创建一个zip文件,现有软件可以使用utf-8编码轻松使用?

我写了一个示例程序:

package ZipFile;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import org.apache.tools.zip.ZipEntry;

import org.apache.tools.zip.ZipOutputStream;

public class ZipFolder{

public static void main(String[] a) throws Exception

{

String srcFolder = "D:/9.4_work/openscript_repo/中文124.All/中文";

String destZipFile = "D:/Eclipse_Projects/OpenScriptDebuggingProject/src/ZipFile/demo.zip";

zipFolder(srcFolder, destZipFile);

}

static public void zipFolder(String srcFolder, String destZipFile) throws Exception

{

ZipOutputStream zip = null;

FileOutputStream fileWriter = null;

fileWriter = new FileOutputStream(destZipFile);

zip = new ZipOutputStream(fileWriter);

zip.setEncoding("UTF-8");

// using GBK encoding, the chinese name can be correctly displayed when unzip

// zip.setEncoding("GBK");

addFolderToZip("", srcFolder, zip);

zip.flush();

zip.close();

}

static private void addFileToZip(String path, String srcFile, ZipOutputStream zip) throws Exception

{

File folder = new File(srcFile);

if (folder.isDirectory()) {

addFolderToZip(path, srcFile, zip);

}

else {

byte[] buf = new byte[1024];

int len;

FileInputStream in = new FileInputStream(srcFile);

zip.putNextEntry(new ZipEntry(path + "/" + folder.getName()));

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

zip.write(buf, 0, len);

}

}

}

static private void addFolderToZip(String path, String srcFolder, ZipOutputStream zip) throws Exception

{

File folder = new File(srcFolder);

for (String fileName : folder.list()) {

if (path.equals("")) {

addFileToZip(folder.getName(), srcFolder + "/" + fileName, zip);

}

else {

addFileToZip(path + "/" + folder.getName(), srcFolder + "/" + fileName, zip);

}

}

}

}

解决方法:

这里的最佳答案可以回答你的问题;不幸的是,它似乎表明Zip格式并不真正允许创建一个Zip文件,可以在任何计算机上正确显示文件名:

我希望它在你将编码设置为GBK时有效,因为这是你系统的默认编码,所以7zip正在使用它来打开所有的zip文件.

它表明rar和7z格式有更好的支持.

我在Java的拉链中找到了一篇专门介绍UTF-8的博客文章.它表明有一个较新版本的ZIP规范,当前版本的Java可能没有创建,但Java 7会这样做.我不知道Apache类是否也使用它.

标签:java,encoding,zip,unzip,7zip

来源: https://codeday.me/bug/20190704/1380779.html

java 判断zip文件编码_如何使用UTF-8编码打开java程序生成的zip文件相关推荐

  1. java 判断dir是否存在_谁可以帮忙写一段java判断文件或者文件夹是否存在的代码...

    田心枫 package com.may.ninety; import java.io.File; import java.io.IOException; public class WeekDemo1  ...

  2. 对文件或文件夹进行删除、移动、windows10重命名等操作时,系统可能提示“操作无法完成,因为其中的文件夹已在另一程序中打开,请关闭该文件或文件夹,然后重试

    我们在windows10中对文件或文件夹进行删除.移动.重命名等操作时,系统可能提示"操作无法完成,因为其中的文件夹已在另一程序中打开,请关闭该文件或文件夹,然后重试.",遇到这种 ...

  3. java ascii码转字符_一文让你读懂JAVA.IO、字符编码、

    1 JAVA.IO字节流 inputstream.png LineNumberInputStream和StringBufferInputStream官方建议不再使用,推荐使用LineNumberRea ...

  4. java判断括号是否闭合_用 java 判断 括号是否完全匹配

    用 java 判断 括号是否完全匹配: package emp; import java.util.Stack; public class Parentheses { public static vo ...

  5. java判断是否第一次出现_利用java判断字符首次出现的位置,java替换最后一个特定字符...

    利用java判断字符首次出现的位置利用爪哇判断字符首次出现的位置, 目的: (学习视频分享:java视频教程 实现代码如下: 导入Java.util.收藏品: 导入Java.util.LinkedLi ...

  6. java 判断网络图片是否存在_请教:如何用java判断一个图片的网络地址是否有效?...

    import java.net.HttpURLConnection; import java.net.URL; import org.apache.log4j.Logger; /** * * * 文件 ...

  7. java 判断视频是否损坏_内容研究(或如何判断您的内容是否损坏)

    java 判断视频是否损坏 您的内容效果如何? (How well is your content working?) In the age of data-worship, most site ow ...

  8. java实现.费诺编码_香农费诺编码的matlab实现.doc

    香农费诺编码的matlab实现.doc 信息论与编码实验香农费诺编码的matlab实现学院班级-姓名学号摘要 用预先规定的方法将文字.数字或其他对象编成数码,或将信息.数据转换成规定的电脉冲信号.编码 ...

  9. java byte char io流_一文带你看懂JAVA IO流,史上最全面的IO教学

    原标题:一文带你看懂JAVA IO流,史上最全面的IO教学 一.IO流是什么 惯例引用百科的回答 流是一种抽象概念,它代表了数据的无结构化传递.按照流的方式进行输入输出,数据被当成无结构的字节序或字符 ...

  10. java io流详解_一文带你看懂JAVA IO流,史上最全面的IO教学啦

    一.IO流是什么 惯例引用百科的回答流是一种抽象概念,它代表了数据的无结构化传递.按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列.从流中取得数据的操作称为提取操作,而向流中添加数据的操作 ...

最新文章

  1. C# WinForm给Button按钮或其它控件添加快捷键响应
  2. leetcode 199. Binary Tree Right Side View | 199. 二叉树的右视图(Java)
  3. [Head First Java] - 给线程命名
  4. oracle 跨服务器推送视图_Oracle11g的v$diag_info视图获得控制文件转储文件名及位置...
  5. 秋色园QBlog技术原理解析:性能优化篇:打印页面SQL,全局的SQL语句优化(十三)...
  6. L298N电机驱动模块的使用
  7. 现金支票打印模板excel_Excel的正确使用技巧-Excel的提速大法
  8. 腾讯与新浪微博开放平台之比较
  9. 树莓派搭建DLNA客户端,使用gmediarender,DLAN render。
  10. ASP的工作原理和运行环境
  11. 秀米编辑器内容复制到wangEditor中图片的处理
  12. 将越狱进行到底 Pod2g邀约众大神组建evad3rs
  13. 第二篇:关键点检测的两类方法及区别(短文)
  14. 计算机小学期实践报告,小学期计算机实践报告
  15. 【非原创】这一生至少当一次傻瓜(r4笔记第88天)
  16. 专科毕业,从0到1400star,从阮一峰周刊到尤雨溪推荐的开源项目总结
  17. 红帽Redhat—Linux磁盘管理
  18. 燃动金秋,Stibo Systems(思迪博) 软件受邀参加2021中国服贸会
  19. 计算机硬件打开网络适配器,电脑网络适配器打不开,该设备无法启动-电脑自学网...
  20. 央行回应备付金存管办法修改:可及时监测风险 提高清算效率

热门文章

  1. 小米6android版本多少,小米6有几个版本 小米6各版本区别对比
  2. Centos7 KVM 虚拟机加载NVIDIA驱动
  3. linux需要的GLIBCXX版本,linux系统下的缺失 libstdc++.so.6: version’GLIBCXX_3.4.20’的问题:...
  4. https://wwe.lanzouj.com/i9KEQ00qfjmd
  5. php 判断是什么服务器,php判断服务器是apache还是nginx的方法
  6. K-邻近算法及距离计算公式
  7. 万万没想到:对JS代码混淆,竟造成这样的性能损失?
  8. 为什么蝙蝠一直显示无法连接服务器,Doodle Jump无法连接服务器是什么原因
  9. 《鹰猎长空》探析日本电影业在东西方文化间的摇摆
  10. matlab画一维波动方程,MATLAB编辑一维波动方程的模拟的程序.doc