通過代碼
System.getProperty("file.encoding")
可以獲得file.encoding的值
問題1:file.encoding的值是什麼呢? 這個一開始我認為是操作系統的編碼
但我錯了,它的值為保存每個程序的main入口的那個java文件的保存編碼(點擊文件-->屬性-->text file encoding(other的值),這是使用eclipse 編譯器)
通過以下的代碼即可證明:
/**
* Test.java源代碼文件
*/
public class Test {
public static void main(String[] args) {
System.out.println(System.getProperty("file.encoding"));
//Test2.printEncoding();
}
}
1、文件保存的編碼為:GB2312 時
編譯執行之後,得到的結果為:
GB2312
2、文件保存的編碼為:GBK 時
編譯執行之後,得到的結果為:
GBK
3、文件保存的編碼為:UTF-8時
編譯執行之後,得到的結果為:
UTF-8
從上面的三個結果可以看出,file.encoding的值並不是操作系統os的默認編碼
而是main入口函數所在的類的保存編碼.
但是這時想到了另一個問題,
問題2:是不是每個java文件都有自己的file.encoding呢?
於是我寫了另一個類做試驗,添加了類文件Test2.java
/**
* Test2.java源代碼文件
*/
public class Test2 {
public static void printEncoding(){
System.out.println(System.getProperty("file.encoding"));
}
}
並將源文件Test.java的代碼修改為:
/**
* Test.java源代碼文件
*/
public class Test {
public static void main(String[] args) {
System.out.println(System.getProperty("file.encoding"));
Test2.printEncoding();//添加了這個命令
}
}
這時我將Test.java的保存編碼設置為:utf-8
將Test2.java的保存編碼設置為:GBK
根據問題2我最原始的假設那麼
編譯運行這兩個文件之後得到的結果應該為:
utf-8
GBK
但事實是運行後的結果為:
utf-8
utf-8
於是得出了結論是:
在一個運行的應用程序中
file.encoding的值只有一個,並且值為入口函數的保存編碼的值
至於file.encoding在代碼中的代碼有哪些應用,以後更深入時再討論.