解決windows tomcat控制台中文亂碼問題


 公司的應用部署在windows server服務器上面。一般應用報錯會到服務器查看tomcat控制台報錯信息,但是tomcat中文總是亂碼影響查看。於是就嘗試在自己電腦(win10)上解決tomcat中文亂碼,在網上找了很多資料嘗試了幾種之后總算把問題解決了。

環境

  • 電腦系統:win10
  • tomcat版本:apache-tomcat-8.5.38

解決思路

亂碼問題根本原因是編碼不一致。

找到tomcat目錄下apache-tomcat-8.5.38\conf\logging.properties文件,可以看到tomcat輸出到控制台的日志信息是UTF-8編碼的。

 

而 window控制台默認編碼包括Tomcat控制台編碼默認是GBK編碼的

 所以,我們需要把兩者的編碼設為一致

解決方法

方法1:

修改logging.properties文件,把所有UTF-8的配置項修改為GBK,或者注釋掉。

存在的問題:

 

 我的springboot項目跑不起來了?

原因是項目中文件編碼是utf-8編碼,而windows的jvm默認編碼是GBK,所以項目就跑不起來了。

解決方法:

需要在\apache-tomcat-8.5.38\bin\caalina.bat文件中增加配置 -Dfile.encoding=UTF-8

 -Dfile.encoding=UTF-8的作用

在命令行中輸入 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 這個屬性中獲取的。

 那么添加這個配置之后,再次啟動Tomcat。注意到再次出現亂碼,分析亂碼原因是項目中的日志輸出的中文采用的是UTF-8編碼,而Tomcat日志輸出采用的是GBK編碼,編碼不一致造成亂碼。

那么,要想解決需要修改Tomcat輸出日志采用的編碼也就是在logging.properties文件中配置編碼為UTF-8,也就是恢復該文件的原始配置。然后會發現輸出的編碼UTF-8跟Tomcat窗口編碼GBK又不一致,於是最終的解決方案應該是修改Tomcat窗口的編碼為UTF-8。

方法2:

從方法1可以知道,如果項目中文件編碼采用UTF-8編碼,為了使項目中的日志信息不亂碼最終的解決方案是讓Tomcat窗口的編碼為UTF-8。

  • 修改注冊表,讓Tomcat窗口編碼為UTF-8
  • Win+R快捷鍵打開“運行”窗口
  • 輸入“regedit”打開注冊表
  • 找到HKEY_CURRENT_USER\Console\Tomcat,如果沒有Tomcat就新建一個

  •  選中Tomcat新建DWORD(32位),名稱是CodePage,數值選擇十進制輸入65001(這個是UTF-8對應的值)

修改注冊表完成后,再次打開Tomcat會發現不再有亂碼出現了。

另外,需要注意tomcat窗口的字體如果是默認的“點陣字體”,則UTF-8編碼的中文不能正常顯示,需要修改字體為Consolas

 

 

參考

https://my.oschina.net/lixuelong/blog/3024957

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM