java 判断zip文件编码_如何使用UTF-8编码打开java程序生成的zip文件
我们的产品有一个导出功能,它使用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文件相关推荐
- java 判断dir是否存在_谁可以帮忙写一段java判断文件或者文件夹是否存在的代码...
田心枫 package com.may.ninety; import java.io.File; import java.io.IOException; public class WeekDemo1 ...
- 对文件或文件夹进行删除、移动、windows10重命名等操作时,系统可能提示“操作无法完成,因为其中的文件夹已在另一程序中打开,请关闭该文件或文件夹,然后重试
我们在windows10中对文件或文件夹进行删除.移动.重命名等操作时,系统可能提示"操作无法完成,因为其中的文件夹已在另一程序中打开,请关闭该文件或文件夹,然后重试.",遇到这种 ...
- java ascii码转字符_一文让你读懂JAVA.IO、字符编码、
1 JAVA.IO字节流 inputstream.png LineNumberInputStream和StringBufferInputStream官方建议不再使用,推荐使用LineNumberRea ...
- java判断括号是否闭合_用 java 判断 括号是否完全匹配
用 java 判断 括号是否完全匹配: package emp; import java.util.Stack; public class Parentheses { public static vo ...
- java判断是否第一次出现_利用java判断字符首次出现的位置,java替换最后一个特定字符...
利用java判断字符首次出现的位置利用爪哇判断字符首次出现的位置, 目的: (学习视频分享:java视频教程 实现代码如下: 导入Java.util.收藏品: 导入Java.util.LinkedLi ...
- java 判断网络图片是否存在_请教:如何用java判断一个图片的网络地址是否有效?...
import java.net.HttpURLConnection; import java.net.URL; import org.apache.log4j.Logger; /** * * * 文件 ...
- java 判断视频是否损坏_内容研究(或如何判断您的内容是否损坏)
java 判断视频是否损坏 您的内容效果如何? (How well is your content working?) In the age of data-worship, most site ow ...
- java实现.费诺编码_香农费诺编码的matlab实现.doc
香农费诺编码的matlab实现.doc 信息论与编码实验香农费诺编码的matlab实现学院班级-姓名学号摘要 用预先规定的方法将文字.数字或其他对象编成数码,或将信息.数据转换成规定的电脉冲信号.编码 ...
- java byte char io流_一文带你看懂JAVA IO流,史上最全面的IO教学
原标题:一文带你看懂JAVA IO流,史上最全面的IO教学 一.IO流是什么 惯例引用百科的回答 流是一种抽象概念,它代表了数据的无结构化传递.按照流的方式进行输入输出,数据被当成无结构的字节序或字符 ...
- java io流详解_一文带你看懂JAVA IO流,史上最全面的IO教学啦
一.IO流是什么 惯例引用百科的回答流是一种抽象概念,它代表了数据的无结构化传递.按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列.从流中取得数据的操作称为提取操作,而向流中添加数据的操作 ...
最新文章
- C# WinForm给Button按钮或其它控件添加快捷键响应
- leetcode 199. Binary Tree Right Side View | 199. 二叉树的右视图(Java)
- [Head First Java] - 给线程命名
- oracle 跨服务器推送视图_Oracle11g的v$diag_info视图获得控制文件转储文件名及位置...
- 秋色园QBlog技术原理解析:性能优化篇:打印页面SQL,全局的SQL语句优化(十三)...
- L298N电机驱动模块的使用
- 现金支票打印模板excel_Excel的正确使用技巧-Excel的提速大法
- 腾讯与新浪微博开放平台之比较
- 树莓派搭建DLNA客户端,使用gmediarender,DLAN render。
- ASP的工作原理和运行环境
- 秀米编辑器内容复制到wangEditor中图片的处理
- 将越狱进行到底 Pod2g邀约众大神组建evad3rs
- 第二篇:关键点检测的两类方法及区别(短文)
- 计算机小学期实践报告,小学期计算机实践报告
- 【非原创】这一生至少当一次傻瓜(r4笔记第88天)
- 专科毕业,从0到1400star,从阮一峰周刊到尤雨溪推荐的开源项目总结
- 红帽Redhat—Linux磁盘管理
- 燃动金秋,Stibo Systems(思迪博) 软件受邀参加2021中国服贸会
- 计算机硬件打开网络适配器,电脑网络适配器打不开,该设备无法启动-电脑自学网...
- 央行回应备付金存管办法修改:可及时监测风险 提高清算效率
热门文章
- 小米6android版本多少,小米6有几个版本 小米6各版本区别对比
- Centos7 KVM 虚拟机加载NVIDIA驱动
- linux需要的GLIBCXX版本,linux系统下的缺失 libstdc++.so.6: version’GLIBCXX_3.4.20’的问题:...
- https://wwe.lanzouj.com/i9KEQ00qfjmd
- php 判断是什么服务器,php判断服务器是apache还是nginx的方法
- K-邻近算法及距离计算公式
- 万万没想到:对JS代码混淆,竟造成这样的性能损失?
- 为什么蝙蝠一直显示无法连接服务器,Doodle Jump无法连接服务器是什么原因
- 《鹰猎长空》探析日本电影业在东西方文化间的摇摆
- matlab画一维波动方程,MATLAB编辑一维波动方程的模拟的程序.doc