【问题标题】:UTF-8 wrong character encoding with spring-boot-devtools使用 spring-boot-devtools 的 UTF-8 错误字符编码
【发布时间】:2019-08-01 21:19:34
【问题描述】:

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

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

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

在 Windows 控制台中使用“spring-boot-devtools”的 Spring Boot 是可以的

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

【问题讨论】:

    标签: java maven spring-boot intellij-idea spring-boot-devtools


    【解决方案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 运行时,在 IDE 启动 Maven 时将-Dfile.encoding=UTF8 选项添加到命令行,以便 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 控制台使用相同的编码,因此应用程序将继续在命令行中正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-14
      • 2014-08-31
      • 2017-04-27
      • 2017-01-02
      • 1970-01-01
      • 2018-07-29
      • 2016-01-11
      • 2016-09-23
      相关资源
      最近更新 更多