使用 Eclipse 和 Maven 进行 Java 编码

标签 java maven encoding character-encoding

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

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

一个示例是 java 文件中有一个常量变量,其中包含一个 Scandic 字母,它用于识别传入流中的值(UTF-8 格式)。

底层操作系统也可能是 Windows,并且默认使用 cp1252。

例如以下代码:

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

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

scandics: åäö

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

scandics: ���

首先,需要在 Eclipse 和 maven pom.xml 中更改编码,以便正确读取和存储文件,并让 Eclipse 在保存文件/运行测试时使用正确的编码。 然而,当 Maven 和生成的 java 代码处理传入流(编译并运行测试)时,即使读入的文件是正确的(包含 Scandic 字母),java 文件本身中的常量值仍然损坏。

即使其他所有设置都正确,系统 Java 仍然使用操作系统特定的默认编码。因此,您无法在项目内配置所有内容,还必须为 OS-JVM 执行此操作。

最佳答案

我将解释为此所需的所有编码步骤,即使这个“公共(public)”部分已经有多个答案(至少对于步骤 2)。我的具体情况是解决步骤 3。

  1. 配置 Eclipse:

    • 打开:窗口 > 首选项
    • 在搜索字段中输入“编码”
    • 会有很多条目,但首先选择“常规 > 工作区”
    • 找到“文本文件编码”并选择:其他 > UTF-8
    • 您还希望/需要为所有“常规 > 内容类型”设置编码
    • 从右侧面板中选择“文本”项(将打开文件类型列表),然后浏览所有类型。将其“默认编码”设置为“UTF-8”
    • 点击“更新”按钮以保存更改。
    • 您可能还需要对通过搜索找到的所有其他条目和项目执行此操作。
    • 例如'Web > CSS 文件 > 编码' | 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. 配置操作系统

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

根据评论中的建议,以下是转换文件的更多信息:
您应该注意,所有文件都必须具有 UTF-8 编码才能正常工作。如果您使用给定的配置通过 eclipse 编辑所有内容,它们将采用 UTF-8。
如果您收到应使用代码处理的文件,则可能需要对其进行转换。您只需在 Eclipse 中打开它并再次保存文件即可(您可能需要添加和删除字符才能保存)。
如果您可以使用 NotePad++,则有一个用于转换文件的“编码”菜单。 转换文件时,scandics有时可能会损坏,因此您需要在转换后手动检查它们。

还有一件事。在其他工具中保存的文件,可能有BOM。 (字节顺序标记)。该“字符”是不可见的,例如包含该字符的 XML 文件无法被某些解析器读入。 您可以通过在 Eclipse 中打开文件并将光标设置在文件中的第一个字符之前,然后按 Tab 键一次“退格”来删除 BOM 标记。没有任何变化,但角色实际上被删除,然后文件就可以工作了。

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

关于使用 Eclipse 和 Maven 进行 Java 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28471401/

相关文章:

使用机器人类的 Java 屏幕捕获

java - 修复 maven JSTL 1.2.1 依赖项,因此 maven-war-plugin 不会打包冒犯 Tomcat 7 的 JAR

java - 在 Glassfish 上使用 @EJB 注释和 Maven 的应用程序客户端

java - 触摸文件的 Maven 目标/插件

javascript - 在前端下载ANSI zip文件,由C#后端生成

java - 生成 java 类时出现 wsdl2java 错误

java - Spring Boot从命令行读取属性文件无法解析占位符 'ConfigPath'

java - 简单的平均误差,找不到正确的代码

python - 如何在Python中获取UTF-16(十进制)?

php - 从mysql解码utf-8字符