java?-jar啟動參數設置file.encoding編碼,解決中文亂碼的問題
java -jar啟動參數設置file.encoding編碼,解決中文亂碼
最終解決辦法
java -Dfile.encoding=utf-8 -jar xxx.jar
起因
公司需要基于Jenkins平臺上,進行一個批量構建的項目開發(fā),就是個一次性可以調起多個項目的構建,額,先說點題外話,要永遠都記得一點,客戶都是懶得~
BUG:
使用jenkins-client 請求http://jenkins服務器的域名/job/你的構建項目名/api/json接口獲取數據(該接口可以獲取某個項目的大部分信息),但坑人的是,本地運行不會亂碼,丟到服務器上就尷尬的一批,看圖

貓膩
部署到服務器上,**控制臺,日志文件,頁面上的中文都沒有亂碼, 直接用瀏覽器訪問上述的jenkins api 接口 也顯示正常 ,唯獨就是代碼里jenkins api 返回的數據有亂碼 ** 真的憂桑啊啊啊啊
猜想
是不是對代碼里對reponse 的處理出了問題。額,,果然好像是的,


后臺查出來 本地 的 Charset.defaultCharset() 返回的是 UTF-8 , 而服務器的是GBK簡體中文 ,想哭啊~ 百度了一波 ,查出這個返回值取決于系統(tǒng)的編碼環(huán)境。
解決思路
**改服務器的編碼環(huán)境啦啦啦。 **
嘗試解決
(1)設置了JAVA_TOOL_OPTIONS 系統(tǒng)環(huán)境變量

啟動項目,spring日志里會出現(xiàn)一行 PICK UP JAVA_TOOL_OPTIONS 。。。
則說明生效了。
值得開心的是, 之前那個亂碼問題 解決啦 ,解決啦,值得憂桑的是,
- 框架里的logback 里中文亂碼了,心碎 ;
- jenkins 打包項目 里,涉及到cmd 里的命令 , 參數傳遞 ,和 日志 輸出 ,中文亂碼了
看來這方法不靠譜,修改的應該是整個環(huán)境的編碼,使用還是要慎重!??!


(2)最后查到修改某個項目的編碼
注意是某個項目的運行環(huán)境,不是系統(tǒng)的環(huán)境,可以在啟動參數的時候設定:java -Dfile.encoding=utf-8 -jar xxx.jar,獲取api數據亂碼的問題當然是解決了,可控制臺的中文依舊亂碼。。。
再解決問題:logback.xml指定編碼為GBK 。
大膽猜想下,logback 在沒有設置編碼的情況下,默認應該是跟著當前jvm的編碼走的,所以logback的編碼也變成了UTF-8 ,而我系統(tǒng)的cmd窗口輸出是接受的是中文(取決于系統(tǒng)的編碼)。
如下圖所示:

最后把logback輸出到控制臺的編碼改成中文的就解決。
要將logback的編碼和控制臺的編碼一致

就這樣,最終的問題都解決了~~
最后還是有個疑問,解決控制臺亂碼,嘗試著修改cmd窗口的的編碼改為utf-8 (用chcp 65001 ) 和 該系統(tǒng)保持一致,logback.xml 改成utf-8 編碼,并沒啥用??鄲纞
經過這次,個人覺得以后的logback.xml里最好明確下編碼格式,和當前整個系統(tǒng)的編碼一致,而不是簡單的一個項目的運行環(huán)境編碼。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Springboot2.1.6集成activiti7出現(xiàn)登錄驗證的實現(xiàn)
這篇文章主要介紹了Springboot2.1.6集成activiti7出現(xiàn)登錄驗證的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-12-12
MyBatisPlus利用Service實現(xiàn)獲取數據列表
這篇文章主要為大家詳細介紹了怎樣使用 IServer 提供的 list 方法查詢多條數據,這些方法將根據查詢條件獲取多條數據,感興趣的可以了解一下2022-06-06
Java集合Map的clear與new Map區(qū)別詳解
這篇文章主要介紹了Java集合Map的clear與new Map區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-04-04
SpringSecurity實現(xiàn)原理及多過濾器鏈匹配規(guī)則詳解
SpringSecurity通過FilterChainProxy管理多個過濾器鏈,根據請求的URI和RequestMatcher匹配,選擇合適的過濾器鏈進行認證和授權處理,配置多個過濾器鏈需用@Order區(qū)分優(yōu)先級,處理流程清晰高效2025-10-10
Java參數校驗Validator與@AssertTrue深度解析
本文詳細介紹了Java的Validator框架及其@AssertTrue注解的使用,包括環(huán)境準備、基礎注解介紹、實戰(zhàn)示例、@AssertTrue的深入解析、高級特性和最佳實踐建議,感興趣的朋友跟隨小編一起看看吧2025-01-01

