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

我正在使用maven编译一个包,它说构build失败,出现以下编译错误:

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

我在网上search和许多人,从UTF-8到ISO-8859-1的源代码编码似乎工作,但我仍然得到相同的编译错误。 我正在使用32位的Ubuntu。 这是标签在我的pom.xml中的样子

<project.build.sourceEncoding>ISO-8859-1</project.build.sourceEncoding> 

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

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

谢谢

configurationmaven-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> 

许多Maven插件将默认使用“project.build.sourceEncoding”属性,因此在你的POM中设置它将覆盖大部分插件。

 <project> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> ... 

不过,我更喜欢在支持每个插件的configuration中设置编码,因为我喜欢明确。

当您的源代码由maven-compiler-plugin编译时,编译器插件使用编译器插件configuration的任何编码读入源代码文件。 如果源文件的编码与编译器插件使用的编码不同,那么在这两种编码中都可能不存在某些字符。

许多人更喜欢将源文件的编码设置为UTF-8,以避免这个问题。 要在Eclipse中执行此操作,您可以右键单击一个项目,然后selectProperties-> Resource-> Text File Encoding,然后将其更改为UTF-8。 这将以UTF-8编码所有源文件。 (你也应该像上面提到的那样显式地configurationmaven-compiler-plugin来使用UTF-8编码。)在源文件和编译器插件都使用相同的编码的情况下,编译过程中不应该有更多不可映射的字符。

注意,你也可以通过Window-> Preferences-> General-> Workspace-> Text File Encoding在eclipse中全局设置文件编码。 您还可以通过“窗口” – >“首选项” – >“常规” – >“内容types”设置每个文件types的编码。

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

 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <encoding>Cp1252</encoding> </configuration> </plugin> 

PS:我正在使用GNU / Linux操作系统(Ubuntu)。

我刚刚遇到了这个问题,最终解决了这个问题:我在Notepad ++中打开了有问题的.java文件,并从编码菜单中select了“无BOM转换为UTF-8”。 保存。 重新跑马夫,一切都经过了好。

如果违规资源没有用UTF-8编码 – 就像你为maven编译器插件configuration的一样 – 你会在Np ++的编码菜单中看到文件当前编码旁边的一个项目符号(在我的例子中,我看到它被设置为“ANSI编码”)。

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

在以下情况下会发生这种情况:在Windows上工作时,IDE不太可能configuration为编辑Cp1252中的文件,这是Microsoft拉丁文-11的改编版本。 开发人员检查,连续集成服务器(通常运行在Linux上,现在是全部UTF8)拿起文件,并尝试编译为UTF-8文件,因此警告。

尝试将编码更改为cp1252 。 这工作。 为了避免将来出现这种问题,请在所有开发人员机器上使用相同的编码。

祝你好运…

我也面临类似的问题,我的决议是不同的。 我去了提到的代码行,并遍历到字符(For SpanishTest.java [31,81],到第31行和第81个字符,包括空格)。 我在观察中发现了一个引起这个问题的撇号。 虽然不是一个错误,但编译器报告问题,在我的情况下,有可能删除maven的“非法”字符..大声笑。

当我检查控制台,我发现maven编译器的版本是2.5.1,但在另一方面,我尝试用maven 3.2.2build立我的项目。所以在pom.xml中写入确切的版本后,它工作良好。 这里是完整的标签:

 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.2</version> <configuration> .... <configuration> </plugin> 

在我的情况下,我用这种方法解决了这个问题:

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