我想使用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”(希腊字符丢失)