2009-01-21 35 views
94
警告

我目前工作正發出如下警告Java項目當我編譯:「不可映射字符編碼」在Java中

/src/com/myco/apps/AppDBCore.java:439: warning: unmappable character for encoding UTF8 
    [javac]   String copyright = "� 2003-2008 My Company. All rights reserved."; 

我不知道怎麼之前將會使得字符日期,但它應該是版權符號,並在警告中顯示爲鑽石中的問號。

值得一提的是,字符出現在輸出神器正確,但警告是滋擾和含有此類文件可能有一天通過,節省了編碼錯誤的文本編輯器被觸動......

我怎樣才能將這個字符注入到「版權」字符串中,以便編譯器很高興,並且該符號被保存在文件中而沒有潛在的重新編碼問題?

+0

感興趣的其實知道什麼個字節組成,版權字符,即'hexdump都AppDBCore.java`我有點懷疑它的`\ u00a9`,而是東西由於您的系統設置,部分適用於您。上面的問號用於替換Unicode值中未知或不可表示的傳入字符。http://hexutf8.com/?q=c2a9efbfbd20323030332d32303038204d7920436f6d70616e792e20416c6c207269676874732072657365727665642e – jar 2016-09-09 21:28:03

回答

48

使用「\ uxxxx」轉義格式。

Wikipedia,版權符號是unicode U + 00A9所以你行應爲:

String copyright = "\u00a9 2003-2008 My Company. All rights reserved."; 
+13

請注意\ nNNN個字符......在進行詞法分析之前先對其進行解析。例如,如果您將此註釋/ * c:\ unit * /添加到您的代碼中,它將不再編譯,因爲「nit」不是正確的十六進制數。 – 2009-01-21 11:25:40

+3

絕對。 (這在C#中處理得更好,其中unicode轉義僅適用於特定的上下文環境 - 但隨後還存在危險的\ x轉義序列,這非常糟糕。) – 2009-01-21 11:38:31

+0

非常好,轉義格式效果很好。謝謝喬恩! – seanhodges 2009-01-21 11:48:58

85

與嘗試:javac的 -encoding ISO-8859-1 file_name.java

1

如果您使用eclipse(即使你編寫utf8字符,Eclipse也可以爲你編寫utf8代碼,編程時你會看到正常的utf8字符,但後臺將是utf8編碼);

  1. 選擇項目
  2. 點擊右鍵,選擇屬性
  3. 選擇資源資源小組(其中2之後打開右上角的菜單)
  4. 你可以看到資源面板,文本文件編碼,選擇其他你wa nt

P.S:這將確定如果你在代碼中的靜態值。例如String test =「İİİİİııııııçççççç」;

1

我有同樣的問題,其中java錯誤消息中報告的字符索引不正確。我把它縮小到報價位置是以十六進制094(取消而不是報價,但表示爲報價)而不是十六進制022之前的雙引號字符。只要我交換十六進制022變體,一切都很好。

36

如果您使用的是Maven,請在編譯器插件的配置中明確設置<encoding>,例如,

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.3.2</version> 
      <configuration> 
       <encoding>UTF-8</encoding> 
      </configuration> 
     </plugin> 
4

這其中大部分編譯錯誤出現時的Unicode(UTF-8編碼)文件編譯

javac -encoding UTF-8 HelloWorld.java 
時間

也可以將此編譯選項添加到您的IDE 例如:Intellij idea
(文件>設置> Java編譯器)添加作爲附加命令行參數

enter image description here

-encoding : encoding Set the source file encoding name, such as EUC-JP and UTF-8.. If -encoding is not specified, the platform default converter is used. (DOC)

1

如果一個人使用Maven從命令提示一個構建可以使用下面的命令,以及:

    mvn -Dproject.build.sourceEncoding=UTF-8 
14

把這行放在yor文件中,放在Java conf上面。

apply plugin: 'java' 
compileJava {options.encoding = "UTF-8"} 
1

這爲我工作 -

<?xml version="1.0" encoding="utf-8" ?> 
<project name="test" default="compile"> 
    <target name="compile"> 
     <javac srcdir="src" destdir="classes" 
          encoding="iso-8859-1" debug="true" /> 
    </target> 
</project> 
相關問題