java – “IllegalArgumentException:UNMAPPABLE [1]”,同时使用希腊字符压缩文件

前端之家收集整理的这篇文章主要介绍了java – “IllegalArgumentException:UNMAPPABLE [1]”,同时使用希腊字符压缩文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想使用ZipOutputStream在 Windows(7)上压缩一个文件.问题是文件名(和文件内容)也包含希腊字符(“ГП0000660040140521_a.txt”,Gamma和Pi).我使用的压缩文件代码
ZipOutputStream zipOs = new ZipOutputStream(
    new FileOutputStream("c:\\temp\\test.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文件,但压缩文件名称错误的:“ðôðƒ0000660040140521_a.txt”(希腊字符丢失)

解决方法

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

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

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

猜你在找的Java相关文章