Java 使用 Eclipse 和 Maven 编码

Java encoding with Eclipse and Maven

我经常看到编码出现问题。因此,我写下了这个指令集来执行所有需要的操作,以使事情正常进行(使用编码)。 此设置与 Eclipse 相关,但它也将指导 Maven 设置。

在 java 文件中使用斯堪的纳维亚字母时,编码问题最为严重(åäö,它们在 运行 时间具有实际意义)。

一个例子是在 java 文件中有一个常量变量,它包含一个 scandic 字母,它用于识别来自传入流的值(在 UTF-8 中)。

另外底层的OS可能是Windows,他们默认使用cp1252。

例如以下代码:

@Test
public void scandicTest() {
    System.out.println("scandics: åäö");
}

当一切配置正确时(例如在 eclipse 中),运行此测试将产生:

scandics: åäö

但是,如果您 运行 通过 Maven(从命令行或在 eclipse => mvn test 中)执行此操作,您将拥有:

scandics: ���

首先,需要在 eclipse 和 maven 中更改编码 pom.xml 以正确读取和存储文件,并使 eclipse 在保存文件时使用正确的编码 / 运行宁测试。 然而,当 Maven 和生成的 java 代码处理传入流(编译 & 运行 测试)。

系统 Java 仍然使用 OS 特定的默认编码,即使其他所有设置都正确。出于这个原因,您不能在项目中配置所有内容,您也必须为 OS-JVM 进行配置。

我将解释为此所需的所有编码步骤,即使这个 "common" 部分已经有多个答案(至少对于第 2 步)。我的特殊情况是解决第 3 步。

  1. 配置eclipse:

    • 打开:Window > 首选项
    • 在搜索字段中输入 'encoding'
    • 会有很多条目,但首先 select 'General > Workspace'
    • 找到 'Text file encoding' 和 select: 其他 > UTF-8
    • 您还want/need设置编码也所有 'General > Content Types'
    • Select 'text' 右侧面板中的项目(将打开文件类型列表),然后浏览 所有类型 。将他们的 'Default encoding' 设置为 'UTF-8'
    • 单击 'update' 按钮以保存更改。
    • 您可能还需要对通过搜索找到的所有其他 条目和项目执行此操作。
    • 例如'Web > CSS Files > Encoding' | ISO 10646/Unicode(UTF-8)
    • 当所有设置完成后,Eclipse 应该能够正确处理编码。
  2. 设置编码maven.pom.xml

    <project>
    ...
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
      </properties>
    ...
    </project>
    
    • 您可能还需要为所有插件设置编码。

      <plugin>
        ...
        <configuration>
          <encoding>UTF-8</encoding>
          ...
        </configuration>
      </plugin>
      

      <plugin>
        <executions>
          <execution>
            <configuration>
              <encoding>UTF-8</encoding>
              ...
            </configuration>
            ...
          </execution>
        </executions>
      </plugin>
      

      虽然我不确定后者是强制性的还是实际上会采用默认值。

  3. 配置OS

    • 您需要设置环境变量 JAVA_TOOL_OPTIONS 值为 -Dfile.encoding=UTF8

如评论中所建议,这里有一些关于转换文件的更多信息:
您应该注意,所有文件都必须具有 UTF-8 编码才能工作。如果您使用给定的配置通过 eclipse 编辑所有内容,它们将是 UTF-8。
如果你收到一个你应该用你的代码处理的文件,你可能需要转换它。您可以通过在 eclipse 中打开它并再次保存文件来简单地做到这一点(您可能需要添加和删除一个字符才能保存)。
如果您可以使用 NotePad++,则有一个用于转换文件的 'encoding' 菜单。 转换文件时,scandics有时可能会损坏,因此您需要在转换后手动检查它们。

还有一件事。在其他工具中保存的文件可能有 BOM。 (字节顺序标记)。此 'character' 是不可见的,例如某些解析器无法读取包含此内容的 XML 文件。 您可以通过在 eclipse 中打开文件并将光标设置在文件中的第一个字符之前来删除 BOM 标记,然后按 'backspace' 键一次。什么都没有改变,但角色实际上被删除了,然后文件就可以工作了。

NotePad 可能会插入 BOM 标记,因此请勿使用它来编辑 XML 个文件!