1. 程式人生 > >在cmd中執行jar的編碼問題

在cmd中執行jar的編碼問題

本文主要以自己的例子敘述了在cmd中執行jar包時,遇到的編碼問題,以及解決問題的過程。

問題:程式在eclipse中進行開發,涉及一些IO操作,且需要在不同的機子上跑,因此為了方便,將程式碼打包成了jar包。但是發現在eclipse中結果執行正確,在cmd中執行結果卻錯誤。對問題進行除錯,最後發現問題出在以下程式碼中:

if(splitLine[8].equals("空車"))

該判斷中涉及到了中文字元,資料是從一個utf-8編碼的檔案中讀取的,而我們在eclipse中一般都設定預設編碼為utf-8編碼,因此可以正確判斷。但是cmd預設的卻是以gbk編碼來執行,因此這裡的判斷顯然會出錯。

chcp 65001

cmd將會進入utf-8編碼模式,在該模式下執行jar包
這裡寫圖片描述
但是結果仍然是錯誤的,該方法並沒有改變java在執行時的編碼方式。

嘗試2:規定執行java時的編碼方式
涉及到一些jvm方面的知識,具體的解決方案是在執行java時為jvm規定編碼。當我們輸入java時可以看到一些引數指令,如下圖:
這裡寫圖片描述
其中的-D引數以鍵值的形式在啟動jvm時規定一些輸入引數,在本例子中,需要規定的是編碼這一引數,cmd中執行時,只需在java後面加上-Dfile.encoding=utf-8即可

java -Dfile.encoding=utf-8 xxxxxxx

本例中,我們對該方案進行嘗試,可以看到,問題得到了解決

。(該命令無需在chcp 65001模式中執行)

這裡寫圖片描述