相信不少朋友會(huì)在初始安裝后啟動(dòng)tomcat服務(wù)器,tomcat打印的日志會(huì)出現(xiàn)亂碼現(xiàn)象动壤。如下圖所示
圖片.png
下面是幾個(gè)解決該問題的方法:
一 改tomcat的配置文件
- 解決步驟
- 在tomcat的安裝目錄下找到logging.properties文件反璃,其路徑如下:
D:\software4code\apache-tomcat-8.5.45\conf
- 在該文件中找到
java.util.logging.ConsoleHandler.encoding這個(gè)屬性并從原來的UTF-8改為GBK捻撑。
圖片.png
- 重啟tomcat,可見亂碼問題得到解決夷家。
-
原理說明
通過搜索很容易得到很多該解決方法的文章绒疗,但其之所以能其作用的原理一般都很少提及靶累。下面就其起作用的原理進(jìn)行探討腺毫。其實(shí)通過問題的描述和通過修改配置編碼為GBK得到解決,很容易猜測出問題的起因可能是日志中進(jìn)行編碼時(shí)使用了UTF-8編碼格式進(jìn)行編碼尺铣,而解碼時(shí)使用了系統(tǒng)(或命令行)默認(rèn)的GBK編碼格式進(jìn)行解碼拴曲,因此產(chǎn)生了打印亂碼的現(xiàn)象。
為了驗(yàn)證一下猜想凛忿,通過代碼進(jìn)行了以下簡單的實(shí)驗(yàn)澈灼。
@Test
public void testTranseCharacter() throws Exception{
String str = "信息";
byte[] bytes_gbk = str.getBytes("GBK");
byte[] bytes_u8 = str.getBytes("UTF-8");
String strU8toGBK = new String(bytes_u8,"GBK");//用GBK去解U8編碼
System.out.println("strU8toGBK: "+strU8toGBK);
String strGBKtoU8 = new String(bytes_gbk,"UTF-8");//用U8去解GBK編碼
System.out.println("strGBKtoU8: "+strGBKtoU8);
}
strU8toGBK: 淇℃伅
strGBKtoU8: ???
在打印結(jié)果中出現(xiàn)了熟悉的“淇℃伅”,可見出現(xiàn)問題的原因正是前文所猜測的店溢。
亂碼是因?yàn)榫幋a和解碼時(shí)所使用的編碼格式不一致所引起叁熔,那么可不可以在不修改配置文件的情況下,通過修改系統(tǒng)或命令行的編碼格式為UTF-8使其與tomcat的日志初始時(shí)所采用的UTF-8一致去解決亂碼問題呢床牧?按照此思路下文通過修改命令行編碼和系統(tǒng)編碼嘗試解決該亂碼問題荣回。
二 改命令行編碼
沒效
三 改系統(tǒng)編碼
- 將系統(tǒng)的編碼格式設(shè)置為UTF-8
圖片.png
- 再次啟動(dòng)tomcat
日志如下:
圖片.png
可見亂碼問題得到解決。
- 系統(tǒng)改為utf-8編碼的壞處
使用gbk作為編碼的軟件中文會(huì)出現(xiàn)亂碼的情況戈咳。
圖片.png