我想在 Windows (7) 上使用 .zip 压缩文件ZipOutputStream
。问题是文件名(以及文件文件内容)还包含希腊字符(“ ГП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
”(缺少希腊字符)