gpt4 book ai didi

java - "IllegalArgumentException: UNMAPPABLE[1]"压缩带有希腊字符的文件时

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:26:13 25 4
gpt4 key购买 nike

我想在 Windows (7) 上使用 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”(缺少希腊字符)

最佳答案

我写这个(迟到的)答案是因为我的问题中有“miso”和“kriegax”的评论。

如果我没记错的话,我在任何地方都读到过,zip 文件中文件名的 UTF8 支持是 zip 文件的一大弱点(因为 UTF-8 不是 zip 标准的官方支持?!?)。现在可能是支持 UTF-8 文件名的现有 zip 应用程序。

但是。在我们的例子中,我们可以用“普通”字符(“a...z”)替换希腊字符,因为要压缩的文件是由财务打印机生成的,并且在每种情况下都只包含一个希腊字符: 一个“PI”(只是一个解决方法...)。

关于java - "IllegalArgumentException: UNMAPPABLE[1]"压缩带有希腊字符的文件时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23783716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com