Неправильная кодировка символов UTF-8 с помощью spring-boot-devtools

Настройки IDE UTF-8, ОС Windows 10, русский язык. Код для вывода на консоль:

System.out.println("тест")

Spring Boot без зависимости «spring-boot-devtools» в IDEA в порядке

Spring Boot с «spring-boot-devtools» в консоли Windows в порядке

Spring Boot с «spring-boot-devtools» в проблеме IDEA: Неправильная кодировка символов UTF-8 с помощью spring-boot-devtools

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
2 161
1

Ответы 1

Следующая конфигурация в pom.xml решит проблему:

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
          <executable>true</executable>
          <jvmArguments>-Dfile.encoding=UTF8</jvmArguments>
        </configuration>
      </plugin>
    </plugins>
  </build>

Объяснение:

Кодировка консоли Windows — cp1251 с вашей локалью, а кодировка консоли IntelliJ IDEA — UTF-8.

При запуске из IntelliJ IDEA параметр -Dfile.encoding=UTF8 добавляется в командную строку, когда IDE запускает Maven, чтобы кодировка вывода Maven JVM была такой же, как кодировка консоли IDE.

Без spring-boot-devtools этот параметр передается правильно и обрабатывается процессом JVM, выполняющим ваш код в консоли IDE. Это тот же экземпляр JVM, на котором работает Maven, все работает нормально.

С зависимостью spring-boot-devtools Maven JVM разветвляет другую JVM для запуска вашего кода, и параметр кодирования файла больше не передается ей. Кодировка файла по умолчанию соответствует языковому стандарту системы для нового процесса JVM и становится cp1251, в то время как консоль IntelliJ IDEA по-прежнему настроена на использование кодировки UTF-8. Вывод нарушен, как показано на скриншоте.

spring-boot-maven-pluginjvmArguments конфигурация должна использоваться для передачи опции кодирования разветвленной JVM. Это также заставляет консоль Windows использовать ту же кодировку, чтобы приложение продолжало правильно работать в командной строке.

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