HTML-код umlauts не отображается правильно, если программа выполняется через файл JAR

У меня есть следующий код 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 и получаю такой вывод:

тестовое задание

Темп

Apfel

Но если я создаю JAR-артефакт и запускаю его, умлауты отображаются неправильно. Это выглядит так:

тестовое задание

Rte

pfel

Это тот же код Java, и кодировка установлена ​​в UTF-8.

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);
Другие вопросы по тегам