java - 具有非 UTF-8 字符集的 JAR 文件

标签 java jar character-encoding

在 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/

相关文章:

java - UTF-8解码问题

php - 如何使用 php 检索 utf-8 数据并在 excelsheet 数据库转储中显示正确的编码?

java - 使用 Jackcess 从 Ubuntu 14.04 服务器访问 Microsoft Access 数据库

java - 使用模拟对象进行 Junit 测试

android - 将第 3 方 Android JAR 集成到 Titanium Mobile 应用程序中?

java - 动态创建java字节码和可运行的jar

python - python 中字符集之间的转换

java - 无法使用eclipse引用java中的项目

java - 如何为 libGDX 桌面应用程序设置应用程序图标?

java - Xpages运行时错误: 'java class java.lang.IllegalStateException: Access denied (java.lang.RuntimePermission getClassLoader)'