java 中關於System property 之 file.encoding

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在代碼中的代碼有哪些應用,以後更深入時再討論

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章