1. 程式人生 > 實用技巧 >javac中不引人注目的編碼小坑

javac中不引人注目的編碼小坑

來看下面這段java程式:

public class Test{
    public static void main(String[] args){
        System.out.println("哈哈哈");
    }
}

是不是感覺沒什麼問題,是的,的確沒問題。

但在windows下使用javac Test.java編譯該原始檔(原始檔編碼為utf-8)時會報錯,如下:

Test.java:3: 錯誤: 編碼 GBK 的不可對映字元 (0x88)
        System.out.println("鍝堝搱鍝?");
                                ^
1 個錯誤

造成這個問題的原因如下:

原始碼檔案的字元編碼格式為utf-8,但javac編譯時會以作業系統預設的字元編碼去解釋原始檔(中文windows平臺預設字元編碼為gbk),當原始碼中只含有英文時不會出現什麼問題,但當原始檔中含有中文時就會出現上面的錯誤。

有兩個解決這個問題的方法:

  • 原始檔以gbk編碼儲存,此方法可行但不推薦。
  • 在javac的編譯引數中有一個-encoding引數,該引數指定了原始檔使用的字元編碼,所以在編譯時加上這個引數指定原始檔的字元編碼即可,如javac -encoding utf-8 Test.java

如果嫌棄每次都要寫這麼長的話,這裡提供一個小方法:

  • 在原始檔儲存的目錄中新建一個文字檔案,寫入以下內容javac -encoding utf-8 %1
    ,重新命名該檔案為myjavac.bat(myjavac可替換為你喜歡的任何名字)。
  • 之後需要編譯時使用如myjavac Test.java這樣的命令即可。
  • 可以將該bat檔案所在的目錄加入到PATH環境變數中,這樣在任何目錄中都可以使用了。

如果想更懶可以寫入javac -encoding utf-8 %1.java,這樣你就可以不用寫java字尾了,如myjavac Test

上面的方法適用於想簡化任何命令的地方。