首先,我用的Idea,在tomcat 8下,一切正常。换成 9以后,就出现了乱码的问题。
在找到真正的问题之前,我在网上百度了N多的资料,都一一试过了,但是都不行。
比如:
1、修改了 windows 配置系统默认为 utf-8 编码。
2、修改 cmd的 默认编码
3、修改 tomcat conf/ server.xml 文件。添加 URIEncoding="UTF-8"
4、修改 idea 下 vm options: -Dfile.enconding = UTF-8
5、修改 tomcat bin目录下的 startup.bat 和 catalina.bat 相应的编码
注: 以上 5条,都不管用。
6、直接修改 tomcat conf/ logging.properties 文件。
添加:java.util.logging.ConsoleHandler.encoding = GBK
这个方法,可以修正tomcat 启动乱码的问题。 但是,程序的 log4j配置下的,日志还是乱码的。
然后。我把 log4j的配置文件,中的:
Encoding = UTF-8 全部修改为 Encoding = GBK
然后,问题是解决了。 但这不是我想要的。 我希望,程序中所有文件的编码,都是UTF-8,保证程序的编码一致性。
然后,我比对了 tomcat8 和 tomcat 9 的基本配置文件。 发现 conf/ logging.properties 文件 有 编码的配置区别。
tomcat9 下的 conf/ logging.properties 文件
多了 5条 xxxxx.org.apache.juli.AsyncFileHandler.encoding = UTF-8
而 tomcat8下,却没有。
然后,我就把这些 org.apache.juli.AsyncFileHandler.encoding = UTF-8 全部注释掉。
把之前的 配置的 GBK 也注释掉。
重启 tomcat。控制台一切正常。
修改 log4j 配置文件,为 UTF-8。 一切都正常。(事实,当把conf/ logging.properties 文件下的 encoding 全部去掉以后,
log4j配置文件,UTF-8/GBK 都可以正常的输出日志。)
自此,问题就解决了。
注: 至于 tomcat 9 下,conf/ logging.properties 文件 配置了 5个 encoding = UTF-8 ,为什么会造成tomcat日志乱码,以及程序自身的日记也乱码。还没尝试了解。(猜想,应该是和 windows 默认的编码有问题。)