簡體   English   中英

錯誤:在maven編譯期間編碼UTF8的不可映射字符

[英]Error: unmappable character for encoding UTF8 during maven compilation

我正在使用maven編譯一個包,它表示構建失敗並出現以下編譯錯誤:

SpanishTest.java [31,81]用於編碼UTF8的不可映射的字符

我在線搜索,對於很多人來說,將源代碼從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-sun和openjdk。

任何人都可以讓我知道該怎么做。

謝謝

配置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>

許多maven插件默認使用“project.build.sourceEncoding”屬性,因此在你的pom中設置它將覆蓋大多數插件。

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

但是,我更喜歡在支持它的每個插件的配置中設置編碼,因為我喜歡顯式。

當您的源代碼由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設置每種文件的編碼。

如果上述答案不起作用,請將編碼更改為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 OS(Ubuntu)。

我剛才遇到了這個問題並最終解決了它:我在Notepad ++中打開了違規的.java文件,並從編碼菜單中選擇了“轉換為沒有BOM的UTF-8”。 保存。 重新跑了maven,都經歷好了。

如果違規資源沒有以UTF-8編碼 - 正如您為maven編譯器插件配置的那樣 - 你會在Np ++的編碼菜單中看到文件當前編碼旁邊的一個項目符號(在我的情況下,我看到它被設置為“用ANSI編碼”)。

因此,您的maven編譯器插件使用-encoding選項設置為UTF-8來調用Java編譯器,但編譯器遇到ANSI編碼的源文件並將其報告為錯誤。 這在以前的Java 5中曾經是一個警告,但在Java 6+中被視為錯誤

在以下情形中會發生這種情況:在Windows上工作時,IDE很可能配置為編輯Cp1252中的文件,這是Microsoft改編的latin-11。 開發人員簽入,持續集成服務器(通常在Linux上運行,現在全部是utf8)獲取文件,並嘗試編譯為UTF-8文件,因此警告。

嘗試將編碼更改為cp1252 這有效。 為避免此類問題,請在所有開發人員計算機上使用相同的編碼。

祝好運...

就我而言,我使用這種方法解決了這個問題:

  1. 設置新的環境變量: JAVA_TOOL_OPTIONS = -Dfile.encoding=UTF8
  2. 或者設置MAVEN_OPTS= -Dfile.encoding=UTF-8

我也面臨類似的問題,我的解決方案也不同。 我去了提到的代碼行並遍歷了角色(For SpanishTest.java [31,81],轉到第31行和第81個字符,包括空格)。 我在評論中發現了一個引起問題的撇號。 雖然不是一個錯誤,maven編譯器報告問題,在我的情況下,有可能刪除maven的“非法”字符..大聲笑。

當我檢查控制台時,我發現maven編譯器的版本是2.5.1,但在另一方面,我嘗試使用maven 3.2.2.So在pom.xml中寫入確切的版本后構建我的項目,它運行良好。 這是完整的標簽:

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

在maven-compiler插件中為我設置incodign屬性。 代碼示例如下

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

我猜這些問題發生在編碼字符串上。 我解決了同樣的問題。 請嘗試在編碼字符串的最后添加trim()。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM