公司的应用部署在windows server服务器上面。一般应用报错会到服务器查看tomcat控制台报错信息,但是tomcat中文总是乱码影响查看。于是就尝试在自己电脑(win10)上解决tomcat中文乱码,在网上找了很多资料尝试了几种之后总算把问题解决了。
环境
- 电脑系统:win10
- tomcat版本:apache-tomcat-8.5.38
解决思路
乱码问题根本原因是编码不一致。
找到tomcat目录下apache-tomcat-8.5.38\conf\logging.properties文件,可以看到tomcat输出到控制台的日志信息是UTF-8编码的。
而 window控制台默认编码包括Tomcat控制台编码默认是GBK编码的
所以,我们需要把两者的编码设为一致
解决方法
方法1:
修改logging.properties文件,把所有UTF-8的配置项修改为GBK,或者注释掉。
存在的问题:
我的springboot项目跑不起来了?
原因是项目中文件编码是utf-8编码,而windows的jvm默认编码是GBK,所以项目就跑不起来了。
解决方法:
需要在\apache-tomcat-8.5.38\bin\caalina.bat文件中增加配置 -Dfile.encoding=UTF-8
-Dfile.encoding=UTF-8的作用
在命令行中输入 java,在给出的提示中会出现 -D 的说明:
-D=
# set a system property
-D 后面需要跟一个键值对,作用是设置一项系统属性
对-Dfile.encoding=UTF-8
来说就是设置系统属性file.encoding
为UTF-8
那么file.encoding
什么意思?字面意思为文件编码。
搜索 java 源码,只能找到 4 个文件中包含file.encoding
的文件,
也就是说,只有四个文件调用了file.encoding
这个属性。
在java.nio.charset
包中的Charset.java
中,这段话的意思说的很明确了。
简单说就是默认字符集是在 java 虚拟机启动时决定的,
依赖于 java 虚拟机所在的操作系统的区域以及字符集。
代码中可以看到,默认字符集就是从file.encoding
这个属性中获取的。
那么添加这个配置之后,再次启动Tomcat。注意到再次出现乱码,分析乱码原因是项目中的日志输出的中文采用的是UTF-8编码,而Tomcat日志输出采用的是GBK编码,编码不一致造成乱码。
那么,要想解决需要修改Tomcat输出日志采用的编码也就是在logging.properties文件中配置编码为UTF-8,也就是恢复该文件的原始配置。然后会发现输出的编码UTF-8跟Tomcat窗口编码GBK又不一致,于是最终的解决方案应该是修改Tomcat窗口的编码为GBK。
方法2:
从方法1可以知道,如果项目中文件编码采用UTF-8编码,为了使项目中的日志信息不乱码最终的解决方案是让Tomcat窗口的编码为UTF-8。
- 修改注册表,让Tomcat窗口编码为UTF-8
- Win+R快捷键打开“运行”窗口
- 输入“regedit”打开注册表
- 找到HKEY_CURRENT_USER\Console\Tomcat,如果没有Tomcat就新建一个
- 选中Tomcat新建DWORD(32位),名称是CodePage,数值选择十进制输入65001(这个是UTF-8对应的值)
修改注册表完成后,再次打开Tomcat会发现不再有乱码出现了。
参考
https://my.oschina.net/lixuelong/blog/3024957