Java -Dfile.encoding=UTF-8 幹掉亂碼

  • java 的執行方式:
  1. java Test.class
  2. jave -jar Test.jar
  3. Jar Test.app
  • 以不一樣的方式來執行,從控制檯中獲得的程序輸出也不一致
    好比說,剛剛在 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

相關文章
相關標籤/搜索