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