UTF-8 неправильная кодировка символов с использованием spring-boot-devtools - PullRequest
2 голосов
/ 11 марта 2019

Настройки 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: enter image description here

1 Ответ

0 голосов
/ 12 марта 2019

Следующая конфигурация в 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-plugin jvmArguments должна использоваться для передачи опции кодирования разветвленной JVM. Это также заставляет консоль Windows использовать ту же кодировку, поэтому приложение продолжит корректно работать в командной строке.

...