公司的應用部署在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