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);