spring-boot-devtools 的 UTF-8 字符编码错误

Evg*_*lov 4 java intellij-idea maven spring-boot spring-boot-devtools

IDE 设置 UTF-8,操作系统 Windows 10,俄语。\n控制台输出代码:

\n\n
System.out.println("\xd1\x82\xd0\xb5\xd1\x81\xd1\x82")\n
Run Code Online (Sandbox Code Playgroud)\n\n

IDEA 中没有“spring-boot-devtools”依赖的 Spring Boot 就可以了

\n\n

Windows 控制台中带有“spring-boot-devtools”的 Spring Boot 就可以了

\n\n

IDEA 中带有“spring-boot-devtools”的 Spring Boot 问题:\n在此输入图像描述

\n

Cra*_*der 5

以下配置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>
Run Code Online (Sandbox Code Playgroud)

解释:

在 Windows 控制台上,区域设置配置的编码为 cp1251,而 IntelliJ IDEA 控制台编码为 UTF-8。

从 IntelliJ IDEA 运行时,-Dfile.encoding=UTF8IDE 启动 Maven 时会在命令行中添加选项,以便 Maven JVM 输出编码与 IDE 控制台编码相同。

如果没有spring-boot-devtools此选项,则会正确传递并由在 IDE 控制台中运行代码的 JVM 进程遵循。它与运行 Maven 的 JVM 实例相同,一切正常。

通过spring-boot-devtools依赖关系,Maven JVM 会分叉另一个 JVM 来运行您的代码,并且文件编码选项不再传递给它。文件编码默认为新 JVM 进程的系统区域设置,并变为 cp1251,而 IntelliJ IDEA 控制台仍设置为使用 UTF-8 编码。输出已损坏,如屏幕截图所示。

spring-boot-maven-plugin jvmArguments应该使用配置将编码选项传递给分叉的 JVM。它还强制 Windows 控制台使用相同的编码,因此应用程序将继续在命令行中正常工作。