加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – “IllegalArgumentException:UNMAPPABLE [1]”,同时使

发布时间:2020-12-14 16:27:40 所属栏目:Java 来源:网络整理
导读:我想使用ZipOutputStream在 Windows(7)上压缩一个文件.问题是文件名(和文件内容)也包含希腊字符(“ГП0000660040140521_a.txt”,Gamma和Pi).我使用的压缩文件的代码: ZipOutputStream zipOs = new ZipOutputStream( new FileOutputStream("c:temptest.
我想使用ZipOutputStream在 Windows(7)上压缩一个文件.问题是文件名(和文件内容)也包含希腊字符(“ГП0000660040140521_a.txt”,Gamma和Pi).我使用的压缩文件的代码:
ZipOutputStream zipOs = new ZipOutputStream(
    new FileOutputStream("c:temptest.zip"),Charset.forName("cp737")
);

File sourceFile = new File("C:/Path/To/File/ГП0000660040140521_b.txt");
String entryName = sourceFile.getName().replaceAll("\","/");
ZipEntry entry = new ZipEntry(entryName);
zipOs.putNextEntry(entry);
...
...

但在最后一行(putNextEntry调用)我得到一个IllegalArgumentException:

java.lang.IllegalArgumentException: UNMAPPABLE[1]
at java.util.zip.ZipCoder.getBytes(ZipCoder.java:95)
at java.util.zip.ZipOutputStream.writeLOC(ZipOutputStream.java:407)
at java.util.zip.ZipOutputStream.putNextEntry(ZipOutputStream.java:221)

我认为希腊语和UTF-8之间的字符映射一定有什么问题…在文件名中用希腊字符压缩文件的正确方法是什么?

编辑

如果我使用“utf-8”作为字符集,可以创建zip文件,但压缩文件的名称是错误的:“e?e?0000660040140521_a.txt”(希腊字符丢失)

解决方法

我写了这个(迟到)的答案,因为我的问题的“味噌”和“kriegax”的评论.

如果我记得我在任何地方阅读UTF8文件夹在zip文件中的支持是zip文件的一个很大的弱点(因为UTF-8不是官方的zip标准支持?现在可以使用现有的zip应用程序,它们在文件名中支持UTF-8.

然而.在我们的情况下,我们可以用“正常”字符(“a … z”)替换希腊字符,因为压缩文件是由财务打印机生成的,并且在每种情况下都包含一个希腊字符:一个“PI”(只有一个解决方法…).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读