在 Java 中,可以使用 ZipFile(File, Charset)
构造函数来解析使用指定字符集的 ZIP 存档。
JarFile(在 util 包中)继承自 ZipFile,但不提供使用 UTF-8 以外的字符集的方法。我需要解析包含未使用 UTF-8 编码的字符串的 Jar 文件。执行此操作的最干净的解决方法是什么?
(我曾考虑过在 JarFile() 构造函数返回后立即使用反射修改私有(private)字段 ZipFile.zc
,但此解决方案并不健壮且特定于 Oracle。)
最佳答案
Charset参数是根据documentation仅用于“解码 ZIP 条目名称和注释”。因此,它与您完全无关。当您从 ZipFile 或 Jar 中读取文件时,您将获得一个 InputStream,它与使用的字符集无关。
因此,在将基于字节数组的 InputStream 转换为基于字符的读取器时,您必须应用正确的字符集,例如通过使用 InputStreamReader .
编辑:
如果我们讨论的是 ZIP 文件中的文件名,您应该能够在同一个文件上创建一个并行的 ZipFile 实例。使用 JarFile.getName()
读取 jar 文件路径。
关于java - 具有非 UTF-8 字符集的 JAR 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30738610/