以不一樣的方式來執行,從控制檯中獲得的程序輸出也不一致
好比說,剛剛在 eclipse 中還能正常打印出來的漢字,在打成 jar 包之後,
雙擊該 jar 文件以 Jar Test.app 的方式來啓動,打印出來的文字就成了亂碼了。
畢竟寫出來的 java 程序最終仍是要打成 Jar 包來使用的,總不能每次都在 eclipse 中啓動吧?java
只有在啓動 java 程序前經過傳遞參數來更改纔有效,程序一經啓動就沒法再更改了。
這樣的話,也就只有經過傳遞 jvm 參數的方式來作默認編碼的變動了:
其一,寫一個帶 -Dfile.encoding=UTF-8 參數的腳本文件來啓動;
其二,用 Jar Bundler.app 打包成 app,效率應該不如第一種方案。
原理其實都差很少,都只是將更改 jvm 默認編碼的操做封裝了起來,執行時就不用再手動鍵入了。app
搜索 java 源碼,只能找到 4 個文件中包含 file.encoding 的文件,
也就是說,只有四個文件調用了 file.encoding 這個屬性。
在 java.nio.charset 包中的 Charset.java 中,這段話的意思說的很明確了。
簡單說就是默認字符集是在 java 虛擬機啓動時決定的,
依賴於 java 虛擬機所在的操做系統的區域以及字符集。
代碼中能夠看到,默認字符集就是從 file.encoding 這個屬性中獲取的。eclipse