编码 - Tomcat - win10 控制台日志乱码 - 已解决
-
概述
- 解决 tomcat 日志乱码
-
背景
- 要在 win10 上测点东西
- 找了个 tomcat 发现居然忘记怎么启动了...
- startup.bat
- 启动时发现, 日志居然是乱码
- 第一次处理类似的问题
- 所以如果有什么 常识 的缺失, 请大家见谅
-
类型
- 这一篇 记录类 的博客
- 主要是记录自己解决问题的过程
- 如果要找解决方案, ref2 里的一般都能搞定
- 这一篇 记录类 的博客
-
环境
-
win10
- 20H2
-
tomcat
- 9.0.39
- JAVA_HOME 配置正确
-
java
- jdk11
-
注册表
# 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor # autorun chcp 65001
-
1. 问题: Tomcat 启动, 日志显示乱码
-
概述
- 启动 tomcat 遇到了点问题
-
步骤
- tomcat: 解压压缩包
- tomcat: 运行 tomcat
- 双击 startup.bat 脚本
-
结果
- 执行成功
- localhost:8080 可以访问
-
问题
- cmd 日志是乱码的...
- 但是 logs 目录下面的日志, 又是正常的
-
这下难受了
- 其实 cmd 这个日志, 它爱咋样都没啥问题
- 也是奇怪, 为啥 logs 里是好的, 这里就是乱的...
- 开始百度...
- 其实 cmd 这个日志, 它爱咋样都没啥问题
2. 尝试1: 修改 tomcat 日志配置
-
概述
- 修改 tomcat 日志配置
-
参考
- ref1
-
logging.properties
-
handler
- 概述
- 大概是 写日志组件
- 类似 log4j 的 appender
- 概述
-
console.handler
- 发现
- 4 个 handler, 只有这一个没有指定 路径
- 配合 console, 大概率是 控制台的配置
- 发现
-
修改
# 原来的值, 是 UTF-8 java.util.logging.ConsoleHandler.encoding = GBK
-
结果
- tomcat 成功启动
- 日志也不乱码了...
-
-
问题
- 我老早就把 cmd 改成了 utf-8 的编码, 为啥现在 tomcat 用 utf-8 反而乱码了?
3. 尝试2: 修改 catalina.bat 脚本
-
概述
- 尝试修改脚本
-
问题
- 为啥 cmd 的编码, 又是 utf-8 了?
-
验证
-
准备
- 启动 tomcat
-
验证
-
查看 tomcat cmd 下的编码
# 1. cmd 窗口的标题栏上, 单击右键 # 2. 选择 属性 # 3. 查看 选项 选项卡 发现 当前代码页, 居然是 936...
-
-
-
思路
- 思路
- 我能不能在 tomcat 的启动脚本里, 找到启动的语句
- 在 执行 tomcat 之前, 把编码替换呢?
- 当然可以啦...
- 思路
-
步骤 - 这里不打算写得很详细, 我虽然最后成功了, 但我觉得方法并不好...
-
startup.bat
- 因为之前没学过 bat 脚本, 所以有点痛苦
- 好在脚本的思路简单清晰
- 结论
- 这个脚本最后会执行命令
catalina.bat start
- 这个脚本最后会执行命令
- 因为之前没学过 bat 脚本, 所以有点痛苦
-
查看 catalina.bat 脚本
- 流程也相对清晰
- 到了 执行 startup 那里, 发现需要改 执行语句
- 思路
-
把 start 的分支, 单独提出来
-
把 切换编码, 和 启动 tomcat 的命令, 写到另一个 bat 脚本里
-
在 start 分支, 调用这个脚本
start Tomcat /K "script.bat"
-
- 思路
-
-
结果
- 成功启动
- 日志不乱吗
-
建议
- 不要使用这种方法
- 可能把其他功能改坏
- 后续更新会比较麻烦
- 不要使用这种方法
4. 尝试3: 换个命令执行
-
概述
- 换个命令执行
-
思路
- 之前看脚本时, 发现有个 run 命令
-
操作
-
在 tomcat 的 bin 目录下, 打开 cmd
-
执行命令
> catalina.bat run
-
-
结果
- 就在当前 cmd 运行 tomcat
- 运行成功
- 编码 和 cmd 编码一样
- 我的是 65001, 不用调, 正常了
5. 尝试4: 修改注册表
-
概述
- 修改注册表
-
当前编码页
- 之前查看过 cmd 编码
- 这玩意居然能用 注册表 改
- ref2
- 我咋就没想到这个东西
- 感觉需要 windows 的知识背景啊
- mfc? c#?
- 或许我当时就应该了解 chcp 到底是什么意思, 而不是仅仅能用就完事了...
-
操作
-
新建路径
计算机\HKEY_CURRENT_USER\Console\Tomcat
-
添加表项
# 名称 CodePage # 值 - 10进制 65001
-
重新尝试开启 tomcat
-
-
结果
- 开启成功
- 编码正常
ps
-
ref
-
解决最新版tomcat在window10下启动可能出现启动日志乱码的情况
- 一个参考
- 我只是控制台乱了
- 我改 gbk 就好了
-
win10 修改 cmd 和 tomcat 命令窗口编码为UTF8
- 按这个哥的办法, 改好了
-
Using UTF-8 Encoding (CHCP 65001) in Command Prompt / Windows Powershell (Windows 10)
- 这位老哥在用 powershell 的时候, 遇到了这个问题...
-
- 2010 年的帖子
- 当时可能还没有 65001 吧
-
-
后续
- 如果 idea 装了 tomcat 插件, 不知道会不会乱码
- jetty 不知道会不会
尽量尝试解释清楚; 自己校对能力有限, 如果有错误欢迎指出