2015-02-12 64 views
0

我經常看到編碼出現問題。因此我寫下了這個指令集來完成所有需要的操作,以便使其工作(使用編碼)。 這個集合與Eclipse相關,但它也將引導maven設置。用Eclipse和Maven編碼的Java編碼

與編碼問題的Java文件使用斯堪的納維亞的字母時是最容易出問題的(AAO,他們對運行時實際意義)。

一個示例情況下,具有在一個java文件中的常量變量,它包含一個斯堪信,它是用於識別從輸入的數據流(至極是UTF-8)的值。

而且底層的操作系統可能是Windows和它們缺省使用CP1252。

E.g.以下代碼:

@Test 
public void scandicTest() { 
    System.out.println("scandics: åäö"); 
} 

當一切都正確配置(例如在eclipse),在運行此測試將產生:

scandics: åäö 

但是,如果你通過Maven的運行此(來自命令行或蝕= > MVN測試),你將有:

scandics: ��� 

首先,編碼必須在Eclipse正確地改變並在Maven的pom.xml讀取和存儲文件以及Eclipse使用correc t保存文件/運行測試時的編碼。 然而,當Maven和生成的Java代碼來處理輸入流在java文件本身的恆定值保持甚至認爲文件讀取是正確的(包含斯堪字母)損壞(編譯&運行測試)。

系統Java仍然使用甚至其他一切都正確設置一個特定的操作系統的默認編碼。由於這個原因,你不能在項目中進行全部配置,你也必須爲OS-JVM做這些。

+0

您是否正確設置了Maven中的屬性,並且您是否通過surefire插件運行了分叉測試?如果是,你是否正確設置了file.encoding系統屬性? – khmarbaise 2015-02-12 07:14:03

+0

看到我的答案,我已經解決了這個問題。這是問答。 – 2015-02-12 07:40:11

回答

2

我將解釋所有爲此所需的編碼步驟,甚至存在用於這種「共同的」部分多個答案已經(對於步驟2至少)。我的具體情況是解決步驟3

  1. 配置蝕:

    • 打開:窗口>首選項
    • 類型「編碼」在搜索領域
    • 將有大量的條目,但首先選擇'一般>工作區'
    • 找到'文本文件編碼'並選擇:其他> UTF-8
    • 您也想/需要設置該編碼也所有「常規>內容類型」
    • 選擇「文本」從右手面板項目(將打開的文件類型列表),並通過瀏覽所有類型 。將他們的'默認編碼'設置爲'UTF-8'
    • 單擊'更新'按鈕以保持更改。
    • 您可能還需要爲所有其他條目和搜索項目執行此操作。
    • E.g. 'Web> CSS文件>編碼'| ISO 10646/Unicode(UTF-8)
    • 當所有設置,Eclipse應該與編碼正常行​​爲。
  2. 在maven.pom.xml

    <project> 
    ... 
        <properties> 
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
        </properties> 
    ... 
    </project> 
    
    • 您可能需要設置編碼所有插件也將編碼設置。

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

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

      如果後者是強制性的還是它是否將採取默認其實雖然我不知道。

  3. 配置OS

    • 你需要設置環境變量JAVA_TOOL_OPTIONS與價值-Dfile.encoding=UTF8

正如評論所說,這裏是用於將文件的一些詳細信息:
您應該注意,所有文件必須具有UTF-8編碼才能使其t工作。如果你使用給定的配置通過eclipse編輯所有東西,它們將是UTF-8。
如果您收到一個應該使用代碼處理的文件,則可能需要將其轉換。你可以簡單地通過在eclipse中打開它並再次保存文件來做到這一點(你可能需要添加和刪除一個字符來啓用保存)。
如果您可以使用NotePad ++,則有一個用於轉換文件的「編碼」菜單。 轉換文件時,scandics有時可能會損壞,因此您需要在轉換後手動檢查它們。

還有一件事。其他工具中保存的文件可能包含BOM。 (字節順序標記)。這個「字符」是不可見的,例如包含它的XML文件不能被某些解析器讀入。 您可以通過在eclipse中打開文件並在文件中的第一個字符之前設置光標來刪除BOM標記,然後選中'backspace'。沒有任何變化,但字符實際上被刪除,然後文件工作。

NotePad可能會插入BOM標記,因此請勿將其用於編輯XML文件!

+0

+1用於提示UTF-8(並解釋設置)。但是,您應該提到已保存的文件可能有其他編碼並且必須進行轉換。 – Seelenvirtuose 2015-02-12 07:42:24

+1

設置插件中的編碼通常不是必須的,因爲插件通常有一個默認的'project.build.sourceEncoding'。報告插件默認使用'project.reporting.outputEncoding'。 – khmarbaise 2015-02-12 07:55:07

+0

@Seelenvirtuose相應地編輯了我的答案 – 2015-02-12 07:56:42