使用Eclipse和Maven的Java编码

使用Eclipse和Maven的Java编码,java,maven,encoding,character-encoding,Java,Maven,Encoding,Character Encoding,我经常看到编码出现问题。因此,我写下了这个指令集,以执行所有必要的操作,从而使事情正常工作(使用编码)。 此集合与Eclipse相关,但也将使用maven设置进行指导 在java文件中使用斯堪的纳维亚字母(åäö,它们在运行时具有实际意义)时,编码问题最为棘手 一个例子是在java文件中有一个常量变量,它包含一个scandic字母,用于从传入流中标识一个值(在UTF-8中) 此外,底层操作系统可能是Windows,默认情况下使用cp1252 例如,以下代码: @Test public void

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

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

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

此外,底层操作系统可能是Windows,默认情况下使用cp1252

例如,以下代码:

@Test
public void scandicTest() {
    System.out.println("scandics: åäö");
}
当所有配置都正确时(例如在eclipse中),运行此测试将产生:

scandics: åäö
但是,如果您通过Maven(从命令行或eclipse=>mvn测试)运行它,您将有:

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


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

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

  • 配置eclipse:

    • 打开:窗口>首选项
    • 在搜索字段中键入“encoding”
    • 将有很多条目,但首先选择“常规>工作区”
    • 找到“文本文件编码”并选择:其他>UTF-8
    • 您还希望/需要为所有常规>内容类型设置编码
    • 从右侧面板中选择“文本”项(将打开文件类型列表),然后浏览所有类型。将其“默认编码”设置为“UTF-8”
    • 单击“更新”按钮以保留更改
    • 您可能还需要对搜索中找到的所有其他条目和项目执行此操作
    • 例如,“Web>CSS文件>编码”| ISO 10646/Unicode(UTF-8)
    • 当所有这些都设置好后,Eclipse应该能够正确地进行编码
  • 在maven.pom.xml中设置编码

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

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

      
      UTF-8
      ...
      ...
      
      虽然我不确定后者是否是强制性的,或者它是否会采取默认的做法

  • 配置操作系统

    • 您需要使用值
      -Dfile.encoding=UTF8设置环境变量
      JAVA\u TOOL\u OPTIONS
  • 正如评论中所建议的,这里有一些关于转换文件的更多信息:
    您应该注意,所有文件都必须使用UTF-8编码才能正常工作。如果您使用给定的配置通过eclipse编辑所有内容,它们将作为UTF-8。
    如果您收到一个应该用代码处理的文件,您可能需要转换该文件。您只需在eclipse中打开该文件并再次保存即可(您可能需要添加和删除一个字符以启用保存)。
    如果您可以使用记事本++,则有一个“编码”菜单用于转换文件。 转换文件时,scandics有时可能会损坏,因此您需要在转换后手动检查它们

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


    记事本可能会插入BOM表标记,因此不要将其用于编辑XML文件

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

  • 配置eclipse:

    • 打开:窗口>首选项
    • 在搜索字段中键入“encoding”
    • 将有很多条目,但首先选择“常规>工作区”
    • 找到“文本文件编码”并选择:其他>UTF-8
    • 您还希望/需要为所有常规>内容类型设置编码
    • 从右侧面板中选择“文本”项(将打开文件类型列表),然后浏览所有类型。将其“默认编码”设置为“UTF-8”
    • 单击“更新”按钮以保留更改
    • 您可能还需要对搜索中找到的所有其他条目和项目执行此操作
    • 例如,“Web>CSS文件>编码”| ISO 10646/Unicode(UTF-8)
    • 当所有这些都设置好后,Eclipse应该能够正确地进行编码
  • 在maven.pom.xml中设置编码

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

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

      
      UTF-8
      ...
      ...
      
      虽然我不确定后者是否是强制性的,或者它是否会采取默认的做法

  • 配置操作系统

    • 你需要