Java 如果通过jar文件执行程序,则html umlauts不会正确呈现

Java 如果通过jar文件执行程序,则html umlauts不会正确呈现,java,html,intellij-idea,jar,j2html,Java,Html,Intellij Idea,Jar,J2html,我有以下Java代码来创建HTML文件。为此,我使用j2html库: String html = html( head( meta().attr("charset", "UTF-8"), title("test"), link().withRel("stylesheet").withHref("style.

我有以下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启动程序,并且我得到以下输出,那么这将非常有效:

testRäteÄpfel

但是如果我创建一个JAR工件并启动它,UMLAUT就不会正确显示。看起来是这样的:

testR�te�pfel

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

在将字符串写入文件时使用

JVM的默认编码可能因您启动JVM的方式而异(这就是为什么您从IntelliJ和direct JAR执行中收到不同的结果)

因此,该方法已被弃用,您应该始终使用该方法,在该方法中,您明确指定编码,而不是依赖JVM默认值:

FileUtils.writeStringToFile(file, html, StandardCharsets.UTF_8);

您确定编译器也使用UTF-8吗?通过ide运行它的编译器会这样做。我可以为工件构建更改它吗?更新:我将字符集(第3行)更改为ISO-8859-1。现在它通过jar文件工作,但不与IntelliJ:D一起工作。Umlauts现在显示为:èIntelliJ控制台的默认字符编码是您在设置对话框的文件编码页面中设置的。最有可能是UTF-8。这就是为什么它在第一个场景中正确显示的原因。在第二个场景中,我假设您正在bash或cmd.exe或类似的程序中运行jar。该程序的字符编码似乎是iso-9959-1,这就是它显示不正确的原因,它是utf-8编码的。当您将html的编码更改为8859时,bash/cmd can无法理解intellij。看,经过一点研究,bash默认使用utf-8编码,所以我猜你是在Windows上运行cmd.exe?如果是这样,似乎无法将cmd.exe的字符编码更改为utf-8。