tomcat源码启动控制台乱码问题
·
tomcat源码启动控制台乱码问题
前言
当前源码版本 8.5.78
下图 1 是改好之后的, 2是没改的,由此可见 tomcat 的这个乱码需要改好几处。

一、解决方式
1.1 修改 idea 配置
把下面那个选项勾上

1.2 修改一下 i18n 对应的文件
- 在 tomcat 中日志的输出是基于 i18n 的
- 每个包下面的这个
LocalStrings_zh_CN.properties的文件都需要修改一下, 但是并不需要改内容,只需要回车保存一下即可- 然后重启就可以看到日志变成中文了。

二、问题原因
2.1 日志打印位置
- tomcat 中日志的打印全部都是以下面这种方式打印的
sm.getString("standardService.start.name", this.name)会读取当前类所在的包的LocalStrings_zh_CN.properties,找到对应的 key(standardService.start.name),然后输出日志- 乱码是因为这个 properties 文件编码错误导致的(其实也不能说编码错误,只是当前编码与
java.util.Properties类解析编码不一致导致的)

2.2 文件对比
- 在 idea 中看这两个文件没有任何的不同,两个文件同样都是 UTF8
- 使用文本编辑器看才会发现两个文件是真的不一样
- 在 Java 的 Properties 类中,只有 Unicode 编码的才能正确解析为中文,另外一个直接 UTF8 中文的会解析为乱码


2.3 Properties 读取编码
下面来自 Deepseek 的回答
- 这两个文件虽然都是UTF-8编码,但在Properties文件中读取时出现中文乱码的原因在于文件内容的存储格式不同。
- Properties类默认使用ISO-8859-1(Latin-1)编码读取文件,当遇到非ASCII字符时,会显示为乱码,(这里还可以使用字符流去读取也能解决乱码问题)
- Properties类能够正确识别和处理 Unicode 编码,读取时会自动转换为对应的中文字符
更多推荐


所有评论(0)