2

在我使用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("♠")
);

如何解决?

4

1 回答 1

3

在使用 Microsoft 构建的 OpenJDK 升级到 Java 17 版本时,我也遇到了问题,因为 Java 源文件现在使用默认的 Windows 编码而不是 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属性。

于 2021-10-08T08:22:47.610 回答