java?-jar啟動參數(shù)設(shè)置file.encoding編碼,解決中文亂碼的問題
java -jar啟動參數(shù)設(shè)置file.encoding編碼,解決中文亂碼
最終解決辦法
java -Dfile.encoding=utf-8 -jar xxx.jar
起因
公司需要基于Jenkins平臺上,進(jìn)行一個批量構(gòu)建的項目開發(fā),就是個一次性可以調(diào)起多個項目的構(gòu)建,額,先說點題外話,要永遠(yuǎn)都記得一點,客戶都是懶得~
BUG:
使用jenkins-client 請求http://jenkins服務(wù)器的域名/job/你的構(gòu)建項目名/api/json接口獲取數(shù)據(jù)(該接口可以獲取某個項目的大部分信息),但坑人的是,本地運行不會亂碼,丟到服務(wù)器上就尷尬的一批,看圖
貓膩
部署到服務(wù)器上,**控制臺,日志文件,頁面上的中文都沒有亂碼, 直接用瀏覽器訪問上述的jenkins api 接口 也顯示正常 ,唯獨就是代碼里jenkins api 返回的數(shù)據(jù)有亂碼 ** 真的憂桑啊啊啊啊
猜想
是不是對代碼里對reponse 的處理出了問題。額,,果然好像是的,
后臺查出來 本地 的 Charset.defaultCharset() 返回的是 UTF-8 , 而服務(wù)器的是GBK簡體中文 ,想哭啊~ 百度了一波 ,查出這個返回值取決于系統(tǒng)的編碼環(huán)境。
解決思路
**改服務(wù)器的編碼環(huán)境啦啦啦。 **
嘗試解決
(1)設(shè)置了JAVA_TOOL_OPTIONS 系統(tǒng)環(huán)境變量
啟動項目,spring日志里會出現(xiàn)一行 PICK UP JAVA_TOOL_OPTIONS 。。。
則說明生效了。
值得開心的是, 之前那個亂碼問題 解決啦 ,解決啦,值得憂桑的是,
- 框架里的logback 里中文亂碼了,心碎 ;
- jenkins 打包項目 里,涉及到cmd 里的命令 , 參數(shù)傳遞 ,和 日志 輸出 ,中文亂碼了
看來這方法不靠譜,修改的應(yīng)該是整個環(huán)境的編碼,使用還是要慎重?。?!
(2)最后查到修改某個項目的編碼
注意是某個項目的運行環(huán)境,不是系統(tǒng)的環(huán)境,可以在啟動參數(shù)的時候設(shè)定:java -Dfile.encoding=utf-8 -jar xxx.jar,獲取api數(shù)據(jù)亂碼的問題當(dāng)然是解決了,可控制臺的中文依舊亂碼。。。
再解決問題:logback.xml指定編碼為GBK 。
大膽猜想下,logback 在沒有設(shè)置編碼的情況下,默認(rèn)應(yīng)該是跟著當(dāng)前jvm的編碼走的,所以logback的編碼也變成了UTF-8 ,而我系統(tǒng)的cmd窗口輸出是接受的是中文(取決于系統(tǒng)的編碼)。
如下圖所示:
最后把logback輸出到控制臺的編碼改成中文的就解決。
要將logback的編碼和控制臺的編碼一致
就這樣,最終的問題都解決了~~
最后還是有個疑問,解決控制臺亂碼,嘗試著修改cmd窗口的的編碼改為utf-8 (用chcp 65001 ) 和 該系統(tǒng)保持一致,logback.xml 改成utf-8 編碼,并沒啥用??鄲纞
經(jīng)過這次,個人覺得以后的logback.xml里最好明確下編碼格式,和當(dāng)前整個系統(tǒng)的編碼一致,而不是簡單的一個項目的運行環(huán)境編碼。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java 客戶端向服務(wù)端上傳mp3文件數(shù)據(jù)的實例代碼
這篇文章主要介紹了Java 客戶端向服務(wù)端上傳mp3文件數(shù)據(jù)的實例代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-09-09SpringBoot實現(xiàn)redis延遲隊列的示例代碼
延時隊列場景在我們?nèi)粘I(yè)務(wù)開發(fā)中經(jīng)常遇到,它是一種特殊類型的消息隊列,本文就來介紹一下SpringBoot實現(xiàn)redis延遲隊列的示例代碼,具有一定的參考價值,感興趣的可以了解一下2024-02-02SpringBoot解決循環(huán)調(diào)用問題
作者在將SpringBoot從1.5版本升級至2.6版本,并遷移至阿里云上運行后,遇到了循環(huán)調(diào)用問題,在Jetty容器中運行沒問題,但在Tomcat容器中就出現(xiàn)了循環(huán)引用問題,原因是SpringBoot 2.6不鼓勵循環(huán)引用,暴露出該問題,作者提供了兩種解決思路2024-10-10SpringBoot項目打jar包與war包的詳細(xì)步驟
SpringBoot和我們之前學(xué)習(xí)的web應(yīng)用程序不一樣,其本質(zhì)上是一個 Java應(yīng)用程序,那么又如何部署呢?這篇文章主要給大家介紹了關(guān)于SpringBoot項目打jar包與war包的詳細(xì)步驟,需要的朋友可以參考下2023-02-02Java 集合實現(xiàn)分頁的方法(業(yè)務(wù)代碼實現(xiàn)分頁)
在Java開發(fā)中,有些場景比較復(fù)雜,受限制,不好在sql查詢層面實現(xiàn)分頁,需要在查詢的list結(jié)果后,將list分頁返回,如何實現(xiàn)呢,帶著這個問題一起通過本文學(xué)習(xí)吧2025-02-02Springboot實現(xiàn)自定義錯誤頁面的方法(錯誤處理機制)
這篇文章主要介紹了Springboot實現(xiàn)自定義錯誤頁面的方法(錯誤處理機制),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01java實現(xiàn)大文件導(dǎo)出的實現(xiàn)與優(yōu)化
這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)大文件導(dǎo)出的實現(xiàn)與優(yōu)化的相關(guān)資料,文中的示例代碼講解詳細(xì),對我們深入了解java有一定的幫助,感興趣的小伙伴可以了解下2023-11-11