Windows下Tomcat部署War包後控制檯輸出中文亂碼解決方案

通常咱們在IDE中都會將項目相關的編碼內容所有設成UTF-8,所以這裏不討論項目的編碼是否有問題(若不肯定,能夠反編譯class文件在文本編輯器中查看其中中文)。java

須要修改的分爲兩部分:windows的控制檯部分和Tomcat自身日誌控制部分apache

1、windows的控制檯部分

首先你要肯定你想修改全部的cmd窗口仍是隻修改Tomcat產生的cmd窗口。windows

若想修改全部cmd窗口的請看操做2,只修改tomcat的請看操做1。tomcat

(修改全部的cmd會使得在cmd內操做程序的時候某些輸出內容爲gbk編碼的文字亂碼,只修改tomcat的就不會有這個問題。)bash

操做一、因爲使用startup.bat啓動Tomcat時,它會讀取catalina.bat的代碼並start一個新窗口運行, 但tomcat打開的cmd默認編碼不是utf-8,從而致使亂碼。編輯器

解決方法ui

1)控制檯部分:打開註冊表,按路徑HKEY_CURRENT_USER→Console→Tomcat(通常解壓版的Tomcat在console目錄下不會有Tomcat這一項,所以須要手動建立),找到CodePage項,沒有則建立(注意建立的時候要DWORD32位),設置值爲十進制的65001。編碼

或直接複製下面代碼,保存爲任意名.bat文件,直接運行。spa

set rr="HKCU\Console\Tomcat"
reg add %rr% /v "CodePage" /t REG_DWORD /d 0x0000fde9 /f>nul複製代碼

這裏推薦使用運行.bat文件方式,比較簡單。日誌

進行完上述操做後,運行startup.bat,在新彈出cmd窗口標題欄上右鍵,點擊屬性,顯示以下

若當前代碼頁顯示爲65001則修改爲功。

操做2、在運行中經過輸入regedit進入註冊表,找到

HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe,

新建一個 DWORD(32位值),命名爲CodePage,值設爲65001,已有CodePage的話,修改它,改成十進制,65001。

若正確修改後,cmd依然爲GBK,能夠試試輸入命令chcp 65001。

修改後,全部的cmd窗口編碼格式都是UTF-8了。

2、Tomcat自身日誌部分

上述修改爲功後,因爲控制檯編碼已改成UTF-8,而Tomcat自身日誌輸出編碼未修改,所以部分強迫症患者可能須要修改Tomcat自身日誌編碼。

因此通常狀況分爲兩種,一種是使用startup.bat另外一種是使用startup.sh,這裏先解決startup.bat。

startup.bat------------------------

須要修改的是Tomcat的bin文件夾下的catalina.bat文件,修改位置以下圖所示


在JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS%後添加

-Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8複製代碼

注意放在引號內,file.encodeing是修改文件內編碼格式,sun.jnu.encoding是修改文件名編碼格式。

修改完畢後彈出cmd內全部內容編碼都爲UTF-8,強迫症患者滿意了。

startup.sh-----------------------------

.sh的窗口內編碼能夠直接在窗體標題欄上右鍵,點擊options,在彈出框內修改成UTF-8。

同理對於catalina.sh的彈出框,咱們須要修改的內容以下圖所示:


在-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager後添加

-Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8
複製代碼

------------------------------------------

其實還有一個簡單的辦法,

就是將start.bat中的call "%EXECUTABLE%" start %CMD_LINE_ARGS%的start換成run,這樣就不用修改註冊表裏內容了。

由於不會彈出額外的catalina.bat窗口了。

start.sh同理。

相關文章
相關標籤/搜索