解决windows tomcat控制台中文乱码问题

 公司的应用部署在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窗口的编码为UTF-8。

方法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会发现不再有乱码出现了。

另外,需要注意tomcat窗口的字体如果是默认的“点阵字体”,则UTF-8编码的中文不能正常显示,需要修改字体为Consolas

 

 

参考

https://my.oschina.net/lixuelong/blog/3024957

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2019-11-14 11:28  ununie  阅读(11415)  评论(0编辑  收藏  举报