【发布时间】:2015-07-19 03:11:04
【问题描述】:
我们的团队有一个程序可以生成用 Java 编写的 PDF。可能具有非 ASCII 文件名的 PDF 使用 Apache Commons Compress 进行压缩。然后将 zip 文件上传到 S3 以供 Windows 和 Mac 客户端下载。
在 Mac 上使用本机工具解压缩时,会使用正确的文件名重新创建文件。但是,当尝试使用本机 Windows UI 工具解压缩时,文件名创建不正确。
压缩过程为:
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
我已经添加了以下代码,它仍然无法正常工作,在 Windows 上显示不可读的字符:
zipFile.setEncoding("UTF-8");
zipFile.setUseLanguageEncodingFlag(true);
zipFile.setCreateUnicodeExtraFields(ZipArchiveOutputStream.UnicodeExtraFieldPolicy.ALWAYS);
如何创建 Mac 和 Windows 都可以使用的 zip 文件?
【问题讨论】:
-
是的,它是UTF8,什么版本的windows?并非所有窗口都使用 UTF8 进行文件名编码。
-
Windows 7,文件名是 utf-8 编码的,mac 可以正确显示,但是 windows 不能,我应该为 windows 生成不同版本的文件名还是有一些方法可以添加 self-描述关于编码到文件名的元数据,以便平台可以相应地推断?
-
您是如何生成要在文件名中使用的 utf 非 ascii 字符的?
-
zipFile.putArchiveEntry(new ZipArchiveEntry(filenameDeduper.getUniqueName(metadataModel.getFileName())));我想这等于说 zipFile.putArchiveEntry(new ZipArchiveEntry(javaString))
-
尝试将文件名放到控制台。它会产生预期的非拉丁字符还是垃圾?据我所见,除非在该函数的某个地方调用其中一个函数不能正确处理 utf8(我相信 utf8 在 java 中是通用的),否则我会不知所措。我能想到的唯一另一件事是操作系统配置为不使用 UTF8 或显示它们。在您知道正确处理 utf8 的不同 Windows 机器上尝试。否则我很茫然。
标签: java windows utf-8 filenames non-latin