最近使用IDEA寫東西發現調用系統cmd /k dir返回的字符串顯示出來有很多亂碼,明顯是UTF8和GBK對中文的處理又出現差異。
想了想windows采取了GBK編碼,於是在IDEA的虛擬機運行參數加上-Dfile.encoding=GBK即可解決。
-Dfile.encoding 解釋:
在命令行中輸入 java,在給出的提示中會出現 -D 的說明:
-D= # set a system property
-D 后面需要跟一個鍵值對,作用是設置一項系統屬性
對 -Dfile.encoding=UTF-8 來說就是設置系統屬性 file.encoding 為 UTF-8
那么 file.encoding 什么意思?字面意思為文件編碼。
搜索 java 源碼,只能找到 4 個文件中包含 file.encoding 的文件,
也就是說,只有四個文件調用了 file.encoding 這個屬性。
在 java.nio.charset 包中的 Charset.java 中,這段話的意思說的很明確了。
簡單說就是默認字符集是在 java 虛擬機啟動時決定的,
依賴於 java 虛擬機所在的操作系統的區域以及字符集。
代碼中可以看到,默認字符集就是從 file.encoding 這個屬性中獲取的。