错误:在maven编译期间编码UTF8的不可映射字符

Yog*_*esh 55 java character-encoding maven

我正在使用maven编译一个包,它表示构建失败并出现以下编译错误:

SpanishTest.java [31,81]用于编码UTF8的不可映射的字符

我在线搜索,对于很多人来说,将源代码从UTF-8改为ISO-8859-1似乎可以工作,但我仍然得到相同的编译错误.我使用的是32位Ubuntu.以下是该标记在我的pom.xml中的显示方式

<project.build.sourceEncoding>ISO-8859-1</project.build.sourceEncoding>
Run Code Online (Sandbox Code Playgroud)

即使我将<project.build.outputEncoding>标签更改为ISO-8859-1,我仍然会收到错误.可能是因为java版本?我的系统上安装了sun-sun和openjdk.

任何人都可以让我知道该怎么做.

谢谢

Ben*_*nus 74

配置maven-compiler-plugin以使用与源文件编码相同的字符编码(例如):

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
        <source>1.6</source>
        <target>1.6</target>
        <encoding>UTF-8</encoding>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

许多maven插件默认使用"project.build.sourceEncoding"属性,因此在你的pom中设置它将覆盖大多数插件.

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

但是,我更喜欢在支持它的每个插件的配置中设置编码,因为我喜欢显式.

当您的源代码由maven-compiler-plugin编译时,您的源代码文件将由编译器插件使用编译器插件配置的任何编码读入.如果源文件的编码与编译器插件使用的编码不同,则两种编码中可能不存在某些字符.

许多人更喜欢将源文件的编码设置为UTF-8,以避免出现此问题.要在Eclipse中执行此操作,您可以右键单击项目并选择Properties-> Resource-> Text File Encoding并将其更改为UTF-8.这将以UTF-8编码所有源文件.(您还应该如上所述显式配置maven-compiler-plugin以使用UTF-8编码.)在源文件和编译器插件都使用相同的编码时,编译期间不应再有任何不可映射的字符.

注意,您还可以通过Window-> Preferences-> General-> Workspace-> Text File Encoding在eclipse中全局设置文件编码.您还可以通过Window-> Preferences-> General-> Content Types设置每种文件的编码.

  • `<encoding> Cp1252 </ encoding>`适合我.谢谢! (3认同)
  • 只有`<project.build.sourceEncoding> Cp1252 </project.build.sourceEncoding>`适合我. (3认同)
  • 请注意,我发现`project.build.sourceEncoding`不起作用的情况.使用`maven-compiler-plugin`(第一个代码片段)的插件配置.谢谢您的回答. (2认同)

fal*_*ker 24

如果上述答案不起作用,请将编码更改为cp1252或手动删除所有出现的特殊字符.对我来说, 特殊字符导致了评论块内的概率.

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-compiler-plugin</artifactId>
   <version>2.3.2</version>
   <configuration>
       <encoding>Cp1252</encoding>
   </configuration> 
</plugin>
Run Code Online (Sandbox Code Playgroud)

PS:我使用的是GNU/Linux OS(Ubuntu).


Pet*_*háč 10

我刚才遇到了这个问题并最终解决了它:我在Notepad ++中打开了违规的.java文件,并从编码菜单中选择了"转换为没有BOM的UTF-8".保存.重新跑了maven,都经历好了.

如果违规资源没有以UTF-8编码 - 正如你为maven编译器插件配置的那样 - 你会在Np ++的编码菜单中看到文件当前编码旁边的一个项目符号(在我的情况下,我看到它被设置为"用ANSI编码").

因此,您的maven编译器插件使用-encoding选项设置为UTF-8来调用Java编译器,但编译器遇到ANSI编码的源文件并将其报告为错误.这在以前的Java 5中曾经是一个警告,但在Java 6+中被视为错误


Jam*_*mes 7

在以下情形中会发生这种情况:在Windows上工作时,IDE很可能配置为编辑Cp1252中的文件,这是Microsoft改编的latin-11.开发人员签入,持续集成服务器(通常在Linux上运行,现在全部是utf8)获取文件,并尝试编译为UTF-8文件,因此警告.

尝试将编码更改为cp1252.这有效.为避免此类问题,请在所有开发人员计算机上使用相同的编码.

祝好运...


BSe*_*zin 6

就我而言,我使用以下方法解决了该问题:

  1. 设置新的环境变量:JAVA_TOOL_OPTIONS = -Dfile.encoding=UTF8
  2. 或设置MAVEN_OPTS= -Dfile.encoding=UTF-8