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

问题描述 投票:2回答:1

IDE设置UTF-8,OS Windows 10,俄语。控制台输出代码:

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

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

在Windows控制台中使用“spring-boot-devtools”进行Spring Boot即可

在IDEA问题中使用“spring-boot-devtools”的Spring Boot:enter image description here

java maven spring-boot intellij-idea spring-boot-devtools
1个回答
0
投票

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运行时,当IDE启动Maven时,-Dfile.encoding=UTF8选项将添加到命令行,以便Maven JVM输出编码与IDE控制台编码相同。

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.