Текст UTF-8 в файле jar

Когда я запускаю проект maven из IntelijIdea и использую, например

System.out.println("Привет")

все в порядке, и я вижу "Привет" в выводе.

Но когда я компилирую проект с maven и запускаю файл jar, я получаю ????? на выходе. Как это можно исправить?

Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
Что такое управление транзакциями JDBC и как оно используется для поддержания согласованности данных?
Что такое управление транзакциями JDBC и как оно используется для поддержания согласованности данных?
Управление транзакциями JDBC - это мощная функция, которая позволяет рассматривать группу операций с базой данных как единую единицу работы. Оно...
Выполнение HTTP-запроса с помощью Spring WebClient: GET
Выполнение HTTP-запроса с помощью Spring WebClient: GET
WebClient - это реактивный веб-клиент, представленный в Spring 5. Это реактивное, неблокирующее решение, работающее по протоколу HTTP/1.1.
Gradle за прокси-сервером
Gradle за прокси-сервером
Создайте проект Gradle под сетевым прокси.
1
0
592
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как правило, существует несколько возможных проблем с конфигурацией кодировок символов.

Я думаю, файл jar все еще верен. Только проблема заключается в выводе символов в консоль (или что вы используете для командной строки выполнения).

Ваша JRE обычно выводит символы в System.out, используя «кодировку платформы по умолчанию». Вы можете проверить это с помощью

System.out.println(System.getProperty("file.encoding"));

(конечно, в JAR-файле, скомпилированном maven, чтобы проверить среду, в которой существует проблема). Это должно дать «UTF-8». Если нет, запустите -Dfile.encoding=UTF-8 в командной строке Java и посмотрите, не изменилось ли что-то.

Тогда может случиться так, что консоль, на которую вы выводите, не поддерживает UTF-8. Если вы работаете в системе Windows, проверьте, какую кодовую страницу использует консоль Windows. Вы можете изменить это с помощью

> CHCP 65001

а затем запустите файл JAR. 65001 — это номер кодовой страницы Windows, означающий UTF-8. Надеюсь, тогда вы увидите правильный вывод.

Еще один аспект часто может пойти не так, но я думаю, что он не относится к вашему случаю: возможно, вы написали свои исходные файлы Java в UTF-8, но maven считает, что источники закодированы, например. ИСО-8859-1. Вы можете проверить это по

String text = "Привет";
System.out.println(text.length());
System.out.println(text);

Если напечатанная длина не равна 6, то возникает путаница с кодировкой исходного файла.

Другие вопросы по теме