我正在尝试开发可以处理具有非英文字符(变音符号,阿拉伯语等)的压缩文件的代码,但压缩文件包含不正确的名称.我使用的是java版本1.7.0_45因此它不应该是由于here提到的错误.我正在为ZipOutputStream构造函数将字符集设置为UTF-8,并且根据Javadocs它应该按照我的要求工作.

我确信zip文件正在正确写入,因为尝试从文件中读取条目会提供正确的文件名(如预期的那样).

但是,当我尝试使用Ubuntu默认的ArchiveManager / Unzip工具打开/解压缩时,文件名会混乱.

这是我的代码:

private void convertFilesToZip(List files) {

FileInputStream inputStream = null;

try {

byte[] buffer = new byte[1024];

FileOutputStream fileOutputStream = new FileOutputStream("zipFile.zip");

ZipOutputStream outputStream = new ZipOutputStream(fileOutputStream, Charset.forName("UTF-8"));

for (File file : files) {

inputStream = new FileInputStream(file);

String filename = file.getName();

System.out.println("Adding file : " + filename);

outputStream.putNextEntry(new ZipEntry(filename));

int length;

while ((length = inputStream.read(buffer)) > 0) {

outputStream.write(buffer, 0, length);

}

outputStream.closeEntry();

}

if(inputStream != null) inputStream.close();

outputStream.close();

System.out.println("Zip created successfully");

System.out.println("=======================================================");

System.out.println("Reading zip Entries");

ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(new File("zipFile.zip")), Charset.forName("UTF-8"));

ZipEntry zipEntry;

while((zipEntry=zipInputStream.getNextEntry())!=null){

System.out.println(zipEntry.getName());

zipInputStream.closeEntry();

}

zipInputStream.close();

} catch (IOException exception) {

exception.printStackTrace();

}

}

文件的输出如下:

Adding file : umlaut_ḧ.txt

Adding file : ذ ر ز س ش ص ض.txt

Adding file : äǟc̈ḧös̈ ẗǚẍŸ_uploadFile4.txt

Adding file : pingüino.txt

Adding file : ÄÖÜäöüß- Español deEspaña.ppt

Zip created successfully

=======================================================

Reading zip Entries

umlaut_ḧ.txt

ذ ر ز س ش ص ض.txt

äǟc̈ḧös̈ ẗǚẍŸ_uploadFile4.txt

pingüino.txt

ÄÖÜäöüß- Español deEspaña.ppt

有没有人成功实现了我希望在这里实现的目标.

有人能指出我可能错过的或者做错了.我做了所有谷歌我甚至尝试过Apache Commons Compress但仍然没有运气.

它在bug报告中提到在Java 7中解决了bug,那么为什么代码不能正常工作.

任何帮助都非常感谢.提前致谢.

java文件名中不能包含的字符,使用Java 7编写包含非英语字符的文件名时,zip条目不正确...相关推荐

  1. java throwable判断,判断(2分) Java语言中的所有异常类都是java.lang.Throwable的子类。...

    判断(2分) Java语言中的所有异常类都是java.lang.Throwable的子类. 更多相关问题 This artical is probably ________. 某企业2010年12月3 ...

  2. java 线程中创建线程_如何在Java 8中创建线程安全的ConcurrentHashSet?

    java 线程中创建线程 在JDK 8之前,还没有办法在Java中创建大型的线程安全的ConcurrentHashSet. java.util.concurrent包甚至没有一个名为Concurren ...

  3. java语言中声明布尔型_【Java初探02】——Java语言基础

    本篇博文就Java语言的一些基本元素进行一些记录和阐述,主要讲解一下Java语言的一些基本构成元素和Java的主类结构. Java语言基础的大致组成 java主类结构 基本的数据类型 变量与常量 运算 ...

  4. java 路径中代替斜杠_老生常谈java路径中的反斜杠和斜杠的区别

    JAVA中的斜杠 有正斜杠与反斜杠之分,正斜杠,一般就叫做斜杠,符号为"/":反斜杠的符号为"\". 斜杠(/)在JAVA中没有什么特别的意义,就是代表一个字符 ...

  5. java爬虫中split的使用_关于java中split的使用

    之前在http://shukuiyan.iteye.com/blog/507915文中已经叙述过这个问题,但是最近一次笔试中居然有碰到了这个知识点,而且还做错了,囧!学艺不精啊.题目大概是这样的: J ...

  6. java语言中解释方式是什么意思,Java语言快速入门·简答T

    1 面向对象与面向过程有什么区别? 面向对象编程:既然面向的是对象,那么强调的自然就是--对象,那么对象多了,就会抽象出相应的类(对象是类的实例化),所以 · 程序是由类组成 · 程序运行的时候去调用 ...

  7. java项目中多个定时器_在java项目中如何使用Timer定时器

    在java项目中如何使用Timer定时器 发布时间:2020-11-16 16:36:16 来源:亿速云 阅读:97 作者:Leah 在java项目中如何使用Timer定时器?很多新手对此不是很清楚, ...

  8. java代码中执行sql报错:java.sql.SQLException: ORA-00923: 未找到要求的 FROM 关键字

    最近写了特别多的数据库同步接口,需要在java程序中拼接大段的sql,然后再提交执行,出现了很多次ORA-00923错误,都有点见怪不怪了. 比如下面这段代码,在执行 db.execute(inser ...

  9. java文件中获取创建日期_如何在Java中获取文件的上次修改日期

    java文件中获取创建日期 Sometimes we need to get the file last modified date in Java, usually for listeners li ...

最新文章

  1. android studio 制作表格_红爆网络的旅游排行榜视频制作其实很简单,赶快动手尝试...
  2. 一种用javascript实现的比较兼容的回到顶部demo + 阻止事件冒泡
  3. ubuntu server 14.10 安装 nodejs
  4. 标注所有线段的lisp程序源码_仪表进近图剖面图的详解(五)进近程序高度限制...
  5. Galaxy Note 20新爆料:至少有两款机型,处理器高低配
  6. Tricks(二十五)—— decorator(在函数调用前后打印日志)
  7. Intent详解及其用法
  8. 【wpf】Page的Unloaded事件
  9. linux下用vi,vim编辑时退出编辑模式(wq)无法保存退出
  10. 使用endnote在毕业论文中插入文献
  11. 高速信号的完整性分析
  12. 姚晨为何可以新浪微博排名第一
  13. 计算机桌面怎么能添加文字,怎么在电脑桌面上添加文字
  14. qt中QPushbutton出现保持按下的效果并且出现一组中同时出现互斥的效果
  15. 老师教我们用计算机画画就是彩虹,拼音ang、eg、ing、ong教学课件.ppt
  16. OpenGL学习笔记(一):环境搭建、三维空间坐标系理解以及OpenGL的基本使用
  17. Baxter实战——baxter摇摆起来(打开gazebo进入baxter仿真)
  18. 遗传转化在大豆研究中的应用(转录因子E1与大豆叶片形态)
  19. Web调用电脑摄像头【实时画面、拍照、截图】
  20. Dinic算法(C语言)

热门文章

  1. 利用sobel算子提取图像的水平特征和竖直特征
  2. C++ STL string字符串内容修改和替换
  3. [Python] 生成迭代器 iter() 函数
  4. Airflow集成在线编写创建dag的插件
  5. k3s 部署, 使用注意事项
  6. WebStorm连接Github教程
  7. WordPress 在function.php 文件中方法中the_XXX方法失效
  8. HDU 1010 深搜+奇偶剪枝
  9. Sqlserver2008 数据库镜像会话的初始连接
  10. 编译安装imagick出错:make: *** [imagick_class.lo] Error 1