標籤:使用 public default char pos 開發 eclipse cal 運行時
java的預設編碼
比如String.getBytes()就調用的預設編碼,流程如下:
會先擷取預設編碼:String csn = Charset.defaultCharset().name();
如果預設編碼有異常則使用:"ISO-8859-1"
那麼預設編碼如何擷取?看了下源碼如下
The default charset is determined during virtual-machine startup and typically depends upon the locale and charset of the underlying operating system.
預設字元集是在虛擬機器啟動期間確定的,通常取決於底層作業系統的地區設定和字元集。
public static Charset defaultCharset() {
if (defaultCharset == null) {
synchronized (Charset.class) {
String csn = AccessController.doPrivileged(new GetPropertyAction("file.encoding"));//系統屬性file.encoding設定的編碼
Charset cs = lookup(csn);
if (cs != null)
defaultCharset = cs;
else
defaultCharset = forName("UTF-8");//得不到系統設定的編碼則用UTF-8
}
}
return defaultCharset;
}
file.encoding 設定(運行時可設定):
在命令列中輸入 java,在給出的提示中會出現 -D 的說明:
-D= # set a system property
-D後面需要跟一個索引值對,作用是設定一項系統屬性
對 -Dfile.encoding=UTF-8 來說就是設定系統屬性 file.encoding 為 UTF-8
其實就是檔案的編碼
java預設編碼理解總結:
先看file.encoding設定的編碼(eclipse運行時候,為了不亂碼會以檔案編碼運行)
如果沒有設定的編碼則用"UTF-8"
如果設定的編碼不可用則用"ISO-8859-1"
注意點:
我們的電腦系統一般都是預設的GBK編碼,如果cmd命令編譯預設都用GBK。
編譯編碼(編譯用編碼和檔案編碼一致,不然會編譯不通過,我猜可能是為了防止編譯亂碼):javac -encoding UTF-8 Test.java
運行編碼(也就是defaultCharset,java會程式用的預設編碼)java -Dfile.encoding=utf-8 Test
編譯編碼和運行編碼之間沒有必要聯絡。編譯編碼(必須和檔案一致,保證檔案的正確編譯),執行編碼(為java程式(JRE)設定預設編碼)。這也是為什麼jar包裡的class代碼無論在什麼編碼下都可執行
在使用eclipse混合檔案編碼時也可編譯執行,原因:個人認為eclipse等開發環境會預設使用檔案編碼格式編譯,檔案(程式入庫的檔案)編碼格式運行(因為啟動並執行是main()方法,main()可以多個,但程式入口就一個)
在伺服器上運行時,不會和eclipse一樣自動化佈建,固最好配置執行編碼
java的預設編碼