尽管设置为UTF-8,但Maven编译期间的"非法字符:\ 65279"

Sle*_*led 11 java utf-8 maven

我试图编译保存为UTF-8有一个文件Maven的Java项目BOM,但我正在逐渐从BOM字符,非法字符错误,尽管有两个我project.build.sourceEncoding还有encoding的中maven-compiler-plugin集来UTF-8.

我错过了额外的设置吗?我是否可以在不删除BOM的情况下进行编译(不允许对源进行任何更改,但我可以修改POM)?


错误:

java:C:\ code\main\src\test\java \net\initech\finance\FinanceTest.java:1:非法字符:\ 65279

财产:

<properties>
    ...
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    ...
</properties>
Run Code Online (Sandbox Code Playgroud)

插件:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>
Run Code Online (Sandbox Code Playgroud)

Hut*_*ut8 11

如果它是UTF-8而不是UTF-16,则BOM完全没有用处.它为什么放在那里?此外,只有Java在这里抱怨 - 而不是Maven.

查看JDK-4508058:UTF-8编码无法识别相关的初始BOM .

  • Re:"BOM完全没有任何意义.为什么它放在那里?":这个准惯例是微软在其记事本文本编辑器中引入的,作为区分UTF-8与其他编码的一种方式.(显然,这不是BOM的初衷,但并不是完全疯狂.) (2认同)

小智 8

1.关闭你的项目.

2.尝试通过记事本++打开文件,并切换到"无BOM的UTF-8".

3.重新打开你的项目.

  • 您应该在记事本++中使用"转换为无BOM的UTF-8". (2认同)

小智 6

在使用记事本打开Java类之后,这发生在我身上.这改变了文件的编码.

我做的一个简单的技巧是:

  1. 从Android Studio/Eclipse打开您的课程
  2. 按Ctrl + A然后按Ctrl + X.
  3. 立即删除您的空课程
  4. 创建一个具有相同名称的新类
  5. Ctrl + V代码
  6. 完成