IDEA 中解决 Tomcat 日志乱码、Activiti bpmn流程图乱码问题

IDEA 中解决 Tomcat 日志乱码、Activiti bpmn流程图乱码问题
chify很早之前就遇到了 IDEA 和 cmd 命令行里 Tomcat 日志中文乱码问题,但是 Tomcat log 目录下的 catalina.log 文件却不是乱码,因为各种缘由没有及时去解决,这次做项目用到了 Activiti 工作流,学习过程中,遇到了 bpmn 流程图中文乱码问题,一并解决了这个问题,这里做个简记,防止下次踩坑。
定位结果
| 症状 | 原因 | 解决方案 |
|---|---|---|
| IDEA 控制台 / Tomcat 日志中文乱码 | -Dfile.encoding 被用户级配置覆盖为 GBK | 修改用户目录下 idea64.exe.vmoptions |
| Activiti bpmn 流程图中文乱码 | IDEA 编码未设为 UTF-8 | 同上 |
| CMD 启动 Tomcat 中文乱码 | Windows CMD 默认使用 GBK 编码 | 修改注册表或使用 chcp 65001 |
适用版本说明: 本文基于 IntelliJ IDEA 2019.3 测试,配置路径和原理在 IDEA 2020.x 及更高版本中基本一致。新版 IDEA 可能将
idea64.exe.vmoptions移至Help -> Edit Custom VM Options菜单管理,操作更方便,但覆盖优先级原理不变。
IDEA 启动文件配置
Google 得知,修改 IDEA bin 目录下 idea64.exe.vmoptions 文件,添加参数 -Dfile.encoding=UTF-8,即可解决问题,如下:
但是重启 IDEA 后发现,bpmn 还是有中文乱码,修改 IDEA 中的 File Encodings,如下:
最终还是无果,想起了之前遇到 Tomcat 在 IDEA 里中文日志乱码问题时,也配置了这个 -Dfile.encoding=UTF-8 参数,结果也是无效,应该是同个问题。
使用 JvisualVM 分析问题
打开 jvisualvm 查看 JVM 的运行情况,如下图:
发现 IDEA 启动时 -Dfile.encoding 参数还是 GBK,初步分析,在 IDEA bin 目录下 idea64.exe.vmoptions 文件中的 -Dfile.encoding=UTF-8 应该是被覆盖了,查阅了一下资料得知,在用户目录下,在 C:\Users\用户名\.IntelliJIdea2019.3\config 目录下的 idea64.exe.vmoptions 文件将会覆盖 IDEA bin 目录下的 idea64.exe.vmoptions 配置文件参数,打开用户目录下的 idea64.exe.vmoptions:
和预想的一致,-Dfile.encoding=GBK,这个问题也就类似于全局系统变量会被用户级变量覆盖一样,只需要改好用户级别的配置即可。所以修改了用户目录下的 IDEA 启动配置文件,改为 -Dfile.encoding=UTF-8,重启 IDEA,配置生效,中文乱码问题得以解决。
配置覆盖优先级
IDEA JVM 参数的加载遵循以下优先级链,用户级配置会覆盖 bin 目录下的全局配置:
graph LR
A["IDEA bin/idea64.exe.vmoptions
(全局默认配置)"] --> B["用户目录配置
C:\\Users\\用户名\\.IntelliJIdea{版本}\\config\\idea64.exe.vmoptions"]
B --> C["IDEA 菜单
Help → Edit Custom VM Options
(手动自定义)"]
C --> D["最终生效的 JVM 参数"]
关键点:用户级配置优先于全局配置,很多人只改了 bin 目录下的文件却无效,原因就在于此。
CMD 启动 Tomcat 中文日志乱码解决
CMD 命令中启动 Tomcat,也发现造成了中文乱码,但是 Tomcat log 目录下的 catalina.log 文件却不是乱码,应该也是因为 Win 10 默认 CMD 窗口使用的不是 UTF-8 编码,只要设置成 UTF-8 即可。配置如下:
使用 chcp 65001 命令可让本次打开的 cmd 窗口使用 UTF-8 编码,但是下次打开还是恢复默认的编码,永久配置需要修改注册表;
win + r,输入 regedit,找到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor,添加如下配置:
重新打开 CMD,启动 Tomcat,中文乱码得以解决。











