Java: ZipOutputStream 和 UTF-8 编码的问题

Java: Problems with ZipOutputStream and UTF-8 encoding

我目前无法让 ZipOutputStream 在某些情况下正确编码 UTF-8 中的 xml 文件。

相关代码如下:

     public void saveQuest(File selectedFile) {

        try {
            ZipOutputStream out = new ZipOutputStream(new FileOutputStream(selectedFile + ".zip"), StandardCharsets.UTF_8);

            out.putNextEntry(new ZipEntry(".data"));
            out.write(quest.getConfigAsBytes());
            for (String scene : quest.getSceneNames()) {
                out.putNextEntry(new ZipEntry(scene+".xml"));
                out.write(quest.getSceneSource(scene).getBytes());
            }
            out.flush();

        } catch (IOException e) {
            e.printStackTrace();

        } finally {
            try {out.close();} catch(IOException e) {}
    }

该代码压缩所有 xml 文件以及 UTF-8 中的数据文件。但只要我 运行 它在我的 Eclipse-IDE 中。一旦我将它放入 运行nable jar 并在 Eclipse 之外 运行 它就不再能够以 UTF-8 编码写入文件。

可能有用的信息:

代码来自旧的 maven 项目,我已将编译器设置为 Java 1.8。但是由于我没有使用 Maven 的实际经验,我不知道那里是否还有其他问题。

这是我的第一个 Whosebug 问题,正如你们可能看到的那样,我并不是那么有经验。如果我忘记提供任何其他重要信息,请告诉我。

您在调用 getBytes() 时未指定编码,这可能是问题的根源。

永远不要调用 String.getBytes()(或 new String(byte[])),因为它很乐意使用平台默认编码,但不能保证总是如您所愿.

quest.getSceneSource(scene).getBytes() 更改为 quest.getSceneSource(scene).getBytes(StandardCharsets.UTF_8) 并修复您的 quest.getConfigAsBytes() 所以它 return 不只是 任何 字节,而是UTF-8 字节。