javac中不引人注目的編碼小坑
阿新 • • 發佈:2020-09-17
來看下面這段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
。
上面的方法適用於想簡化任何命令的地方。