問題背景:
在MyEclipse中開發tomcat版web程序,程序中通過網絡請求,從遠程服務器獲取了一段字符串,顯示爲亂碼(含中文)。初步分析是因爲遠程服務器發送過來的字符流是傳輸內容的UTF-8編碼,而客戶端獲得字符流後,以JVM默認的編碼重新解析爲字符串,因服務器-客戶機編碼不一致,而導致了亂碼問題。
根據經驗,我們知道:
Java虛擬機中字符串編碼默認跟隨操作系統,中文版的Windows系統編碼爲GBK,Linux系統爲UTF8,如果需要手動設定編碼,可以在JVM啓動時添加以下參數:
-Dfile.encoding=UTF-8
新問題:添加以上參數後,java程序輸出到標準輸出(也就是常見的控制檯)時,日誌編碼也會是utf8,但MyEclipse的Console、Windows的cmd窗口,並不知道應該以UTF8編碼來解析jvm輸出的字符,所以會出來亂碼問題。
最終解決方案:
爲了讓JVM輸出編碼與控制檯接收端保持一致,需要手動設置控制檯接收編碼,MyEclipse中操作如下:
1). 依次點擊 Window - Preferences - MyEclipse - Servers - Tomcat - Tomcat 7.x - Launch, 點擊‘Create Launch Configuration’按鈕,新建一個Debug Configuration 。
2). 在Common選項卡中設置Encoding爲utf-8 ,
Arguments選項卡中,添加-Dfile.encoding=UTF-8 參數到VM啓動參數中。如下兩圖:
3). 經過以上步驟,MyEclipse中多出一個Tomcat 7.x [custom]來,以後調試/部署項目就使用這個Tomcat。
這樣,MyEclipse中,Tomcat控制檯亂碼就解決了。