最近一次性从tomcat 9升级到tomcat 10,同时Java sdk也从1.8升级到21。
升级过程中,当然会遇到很多问题,但是控制台输出中文乱码问题,着实折腾了很久。
1、尝试各种方法
网上说的很多通用方法都试过了,就是不生效。包括如下:
- IDEA调试运行配置,Tomcat运行的VM options加参数:-Dfile.encoding=utf-8
- IDEA配置项,File Encodings选项卡,全部设置为UTF-8。
- IDEA配置项,Console选项卡,Default Encoding设置为UTF-8。
- IDEA的Help菜单→Edit Custom VM Options...,末尾增加:-Dfile.encoding=utf-8。
- IDEA的bin目录下,打开idea64.exe.vmoptions文件,末尾增加:-Dfile.encoding=utf-8。
- Tomcat的conf目录下,logging.properties文件中,所有编码调整为UTF-8。
- 甚至是切换SDK。从Oracle SDK切换为open SDK,也不行。
基本上网上说的方法,也就这些方法,全部都试过了,就是不行。
2、排查问题原因
仔细查看控制台输出,发现并不是所有地方都是乱码。如下图所示。
有乱码的地方,都是使用:System.out.println 输出到内容。tomcat自身的输出,都是正常中文。
如果IDEA不经过tomcat,直接使用System.out.println输出,那么会不会是乱码呢?
写一个测试,执行输出,正常。那说明就是tomcat的问题,不是IDEA的问题。
3、解决方法:
1)修改tomcat中conf文件夹下的logging.properties文件。将编码从utf-8改成gbk。
2)修改idea中控制台输出配置为GBK。
3)重启项目,终于看到输出中文了。
注意:这2个地方,必须改成一致,都设置为GBK。如果不一致,仍然会是乱码。都是UTF-8,也会是乱码。