1. 程式人生 > >關於 錯誤: 編碼GBK的不可對映字元 的解決方法

關於 錯誤: 編碼GBK的不可對映字元 的解決方法

原文連結:

http://zhidao.baidu.com/link?url=zS16DyM3AF-3Blu_FfoVwv53jDWHVPMpAHLjD31V7mq7f6xpx6r6iSFiPTr5_7J6m3SK9XVUKY6-_uvY9z6Fja

http://blog.sina.com.cn/s/blog_74a86d5201019ka8.html

①這是因為:由於JDK是國際版的,在編譯的時候,如果我們沒有用-encoding引數指定我們的JAVA源程式的編碼格式,則javac.exe首先獲得我們作業系統預設採用的編碼格式,也即在編譯java程式時,若我們不指定源程式檔案的編碼格式,JDK首先獲得作業系統的file.encoding引數(它儲存的就是作業系統預設的編碼格式,如WIN2k,它的值為GBK),然後JDK就把我們的java源程式從file.encoding編碼格式轉化為JAVA內部預設的UNICODE格式放入記憶體中。然後,javac把轉換後的unicode格式的檔案進行編譯成.class類檔案,此時.class檔案是UNICODE編碼的,它暫放在記憶體中,緊接著,JDK將此以UNICODE編碼的編譯後的class檔案儲存到我們的作業系統中形成我們見到的.class檔案。對我們來說,我們最終獲得的.class檔案是內容以UNICODE編碼格式儲存的類檔案,它內部包含我們源程式中的中文字串,只不過此時它己經由file.encoding格式轉化為UNICODE格式了。當我們不加設定就編譯時,相當於使用了引數:javac -encoding gbk XX.java,當然就會出現不相容的情況。



解決辦法是:應該使用-encoding引數指明編碼方式:javac -encoding UTF-8 XX.java,這下沒警告了,執行也正確了在JCreator 4中設定:選單:Configure --> Options --> JDK Tools --> Compiler,選中<Default>,然後選Edit,Parameters裡面,最前面新增:-encoding UTF-8。

Parameters原來的

預設值為:-classpath "$[ClassPath]" -d "$[OutputPath]" $[ModJavaFiles]

修改後為:-encoding UTF-8 -classpath "$[ClassPath]" -d "$[OutputPath]" $[ModJavaFiles]

在使用EditPlus寫程式碼時,在註釋中寫了中文,有時執行javac命令會提示 錯誤: 編碼GBK的不可對映字元   
經過搜尋發現使用
javac -encoding UTF-8 XX.java
能夠解決。
但是,如果每次都要這麼寫的話很麻煩,所以可以用以下方法解決:
在EditPlus中點選“工具”→“引數設定”→“檔案”→“檔案”
將預設編碼改為ANSI,儲存。
以後通過EditPlus寫的程式碼就不會再出現以上提到的問題了。 

UTF-8簡介:

是 UNICODE 的一種變長字元編碼,即 RFC 3629。這種大字符集可以解決多種語言文字顯示問題,從而實現應用國際化和本地化。UTF-8 編碼可以通過遮蔽位和移位操作快速讀寫,排序更加容易。由於UTF-8 是位元組順序無關的,它的位元組順序在所有系統
中都是一樣的。因此 UTF-8 具有更高的效能。