2

我有以下 Java 代码来创建 HTML 文件。我j2html为此使用该库:

String html = html(
                     head(
                         meta().attr("charset", "UTF-8"),
                         title("test"),
                         link().withRel("stylesheet").withHref("style.css")
                     ),
                     body(
                            h1("Räte"),
                            h2("Äpfel")
                     )
                   ).render();
File file = new File("index.html");
FileUtils.writeStringToFile(file, html);

如果我通过 IntelliJ 启动程序,这将完美运行,并且得到以下输出:

测试

速度

艾普菲尔

但是,如果我创建一个 JAR 工件并启动它,则元音变音符号无法正确显示。它看起来像这样:

测试

rte

�pfel

它是相同的 Java 代码,并且字符集设置为 UTF-8。

4

1 回答 1

1

FileUtils.writeStringToFile(File, String)将字符串写入文件时使用JVM 的默认编码。

JVM 的默认编码可能因您启动 JVM 的方式而异(这就是您从 IntelliJ 和直接 JAR 执行收到不同结果的原因)。

出于这个原因,该FileUtils.writeStringToFile(File, String)方法已弃用,您应该始终使用该FileUtils.writeStringToFile(File, String, Charset)方法,在该方法中明确指定编码,而不是依赖 JVM 默认值:

FileUtils.writeStringToFile(file, html, StandardCharsets.UTF_8);
于 2018-09-25T15:08:46.480 回答