關於tomcat在idea上的中文編碼問題

talentestors發表於2024-05-01

一、問題引入

在國內,無論是新手還是有一定碼齡的開發人員,漢字編碼問題一直都是繞不開的魔咒,本文主要對tomcat在jetbrain系列產品idea上的亂碼問題提供解決經驗。

二、詳情描述

新手在初學Java Web時,興致沖沖的安裝了tomcat 10.x.x 或其他版本→idea新建web專案→試執行:

image

大段的紅色亂碼資訊,衝擊著初學者的心靈。

雖然不會實際開發造成影響,但看著這些雲裡霧裡的資訊時還是挺~影響心情的。😱

淇℃伅 --> 資訊

鍛戒護琛屽弬鏁幫細 --> 命令列引數:

三、問題分析

在以前的 javase 學習中,中文亂碼問題是透過統一編碼的方式解決的(GBK和UTF-8)。

但如下圖所示,很明顯這次絕對不像之前那樣能輕鬆解決。我們可以看到在idea的console下的輸出出現了兩種(可能不止兩種)不同的流,且兩種不同的流使用了兩種不同的編碼格式。(即白色的你好!Hello!!!可以正常顯示,而紅色的資訊卻是亂碼)

image

這裡解釋一下:「你好!Hello!!!」這部分資訊是我在程式碼裡寫的System.out.println("你好!Hello!!!");其他是Tomcat的輸出的日誌資訊。

綜上,問題的解決方案應該從Tomcat下手。

四、解決方案

方法一

作者在遇到這個坑的時候一開始是從問題的根本下手的,既然會出現中文亂碼問題那麼直接讓Tomcat輸出英語不就解決了嗎!😸

於是就從網路上找到了解決方法;

Tomcat啟動時會檢查本地語言環境,來呼叫對應的i18n文字,中文環境預設會顯示中文日誌,但在終端中容易出現亂碼,雖然亂碼問題可以透過修改字符集處理,還是想嘗試一下改成英文輸出。剛研究了一下,發現可以透過修改引數來設定輸出日誌的語言,將執行引數中的語言環境設定為英文即可,在此記錄一下修改步驟

此文件所使用的環境如下

Server version name: Apache Tomcat/9.0.62
OS Name: Windows 10
JVM Version: 1.8.0_301-b09

修改catalina

修改bin/catalina.bat檔案,其中有一項關於CATALINA_LOGGING_CONFIG的配置,大約是230行,不同版本所在行不一樣,大致在那個區間

if not "%CATALINA_LOGGING_CONFIG%" == "" goto noJuliConfig
set CATALINA_LOGGING_CONFIG=-Dnop
if not exist "%CATALINA_BASE%\conf\logging.properties" goto noJuliConfig
set CATALINA_LOGGING_CONFIG=-Djava.util.logging.config.file="%CATALINA_BASE%\conf\logging.properties"
:noJuliConfig

將其中的set語句後面新增language配置-Duser.language=en -Duser.region=US,如下

set CATALINA_LOGGING_CONFIG=-Djava.util.logging.config.file="%CATALINA_BASE%\conf\logging.properties" -Duser.language=en -Duser.region=US

注意空格。

提示:如果是在Linux系統,則修改bin/catalina.sh檔案

修改時間格式

順便改一下顯示日誌中的時間格式,修改conf/logging.properties,在ConsoleHandler區新增timeFormat配置

java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
java.util.logging.ConsoleHandler.encoding = UTF-8

org.apache.juli.OneLineFormatter.timeFormat = yyyy-MM-dd HH:mm:ss

重啟Tomcat檢查修改是否生效。

作者:zhouf_cq
連結:https://www.jianshu.com/p/da8386129a50
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

不得不說,直接改成英文一定是亂碼問題的通解。(直接繞開問題

但是作者一直都有一個壞毛病(X,就是喜歡把所有工具更到最新。

於是就在我的第一次更新Tomcat的時候,它又變成了中文。

Tomcat更新時,會把之前辛苦配置的檔案覆蓋掉,每次都要改一遍。對於我這種懶人來說,一行命令更新後,我可不想重新再修改一遍(這個不是配置檔案,更新後可能會有變動不適合直接copy)。

於是,我就在idea上花費了一番功夫。

方法二

我把idea上的配置全部統一成了utf-8。

檔案編碼

檔案編碼

image

上面是之前學javase的解決的方法。這次只要在上面的設定基礎上新增一個設定。

setting→Editor→General→Console下,修改成UTF-8

image

Default Encoding 修改成UTF-8

image

OK

重啟Tomcat

image

可以看到Tomcat日誌輸出正常了

五、後續問題

之前的問題這裡並沒有完全解決,可以看到System.out.println("你好!Hello!!!");輸出的中文變成了亂碼。

image

我們只要在idea裡面配置一下專案配置就可以了。

image

在此處(紅色的框)新增一句VM option 引數就可以了。

-Dfile.encoding=UTF-8

image

完美解決!

-Dfile.encoding=UTF-8這條引數很常見。

寫在最後

mrfz黍

相關文章