过滤属性文件

过滤资源时,如果您正在过滤属性文件,则必须特别小心。如果您过滤的属性文件包含非 ascii 字符,并且您的project.build.sourceEncoding设置为 ISO-8859-1 以外的任何内容,您可能会受到影响并应继续阅读。

project.build.sourceEncoding与资源有什么关系?

Maven Resources Plugin 一直到 3.2.0 版本,在过滤资源时默认使用project.build.sourceEncoding作为编码,除非您明确配置插件的encoding参数。因此,除非您在 Maven 资源插件中明确配置了编码参数,否则这就是您所得到的。

由Properties类处理的属性文件

当 Properties 类用于读取和写入属性文件时,它们要求属性文件使用 ISO-8859-1 编码。Java 11 仍然是这种情况,可以在Properties 类的 API 文档中看到。因此,以这种方式使用的属性文件需要使用 ISO-8859-1 编码。

用作ResourceBundle的属性文件

当属性文件用作ResourceBundle时,所需的编码因 Java 版本而异。直到并包括 Java 8,这些文件都需要使用 ISO-8859-1 编码。

从 Java 9 开始,属性资源包的首选编码是 UTF-8。它可能适用于 ISO-8859-1,但正如您在 JDK 9文档中的国际化增强中所见,您应该考虑将属性资源包转换为 UTF-8 编码。

我需要做什么?

你需要做两件事:

  1. 根据您在项目中使用它们的方式,决定对属性文件使用哪种编码。
  2. 使用3.2.0 版中引入的propertiesEncoding配置参数显式配置 Maven 资源插件。在大多数情况下,它看起来像这样:
    <project>
      ...
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>3.2.0</version>
            <configuration>
              ...
              <propertiesEncoding>ISO-8859-1</propertiesEncoding>
              ...
            </configuration>
          </plugin>
        </plugins>
        ...
      </build>
      ...
    </project>