相信不少朋友会在初始安装后启动tomcat服务器,tomcat打印的日志会出现乱码现象。如下图所示
下面是几个解决该问题的方法:
一 改tomcat的配置文件
- 解决步骤
- 在tomcat的安装目录下找到logging.properties文件,其路径如下:
D:\software4code\apache-tomcat-8.5.45\conf
- 在该文件中找到
java.util.logging.ConsoleHandler.encoding这个属性并从原来的UTF-8改为GBK。
- 重启tomcat,可见乱码问题得到解决。
-
原理说明
通过搜索很容易得到很多该解决方法的文章,但其之所以能其作用的原理一般都很少提及。下面就其起作用的原理进行探讨。其实通过问题的描述和通过修改配置编码为GBK得到解决,很容易猜测出问题的起因可能是日志中进行编码时使用了UTF-8编码格式进行编码,而解码时使用了系统(或命令行)默认的GBK编码格式进行解码,因此产生了打印乱码的现象。
为了验证一下猜想,通过代码进行了以下简单的实验。
@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: ��Ϣ
在打印结果中出现了熟悉的“淇℃伅”,可见出现问题的原因正是前文所猜测的。
乱码是因为编码和解码时所使用的编码格式不一致所引起,那么可不可以在不修改配置文件的情况下,通过修改系统或命令行的编码格式为UTF-8使其与tomcat的日志初始时所采用的UTF-8一致去解决乱码问题呢?按照此思路下文通过修改命令行编码和系统编码尝试解决该乱码问题。
二 改命令行编码
没效
三 改系统编码
- 将系统的编码格式设置为UTF-8
- 再次启动tomcat
日志如下:
可见乱码问题得到解决。
- 系统改为utf-8编码的坏处
使用gbk作为编码的软件中文会出现乱码的情况。