Java 使用 Microsoft OpenJDK 升级到 Java 17 后出现编码问题

Java encoding issues after upgrading to Java 17 using the Microsoft OpenJDK

在我使用 Microsoft OpenJDK 升级到 Java 17 后,所有使用非 ASCII 字符的测试都因编码失败问题而失败。

例如,我的一项测试使用了以下 Unicode 字符(例如,U+2660 到 U+2663):

entityManager.persist(
    new Suit()
    .setName("Club")
    .setSymbol("♣")
);

entityManager.persist(
    new Suit()
    .setName("Diamond")
    .setSymbol("♦")
);

entityManager.persist(
    new Suit()
    .setName("Heart")
    .setSymbol("♥")
);

entityManager.persist(
    new Suit()
    .setName("Spade")
    .setSymbol("♠")
);

如何解决?

在使用 Microsoft 构建的 OpenJDK 升级到 Java 17 版本时,我也 运行 遇到了问题,因为 Java 源文件现在使用默认 [=29] 编码=]编码,而不是UTF-8。

要解决此问题,请将 file.encoding 属性 设置为 UTF-8

最简单的方法是设置 MAVEN_OPTS 环境变量:

MAVEN_OPTS=-Dfile.encoding=UTF-8

另一种选择是将其传递给 Maven Surefire 插件:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>${maven-surefire-plugin.version}</version>
    <configuration>
        <argLine>-Dfile.encoding=UTF-8</argLine>
    </configuration>
</plugin>

而且,如果你想启动一个Java程序,那么通过-Dfile.encoding=UTF8属性。