前言

当前源码版本 8.5.78
下图 1 是改好之后的, 2是没改的,由此可见 tomcat 的这个乱码需要改好几处。

在这里插入图片描述

一、解决方式

1.1 修改 idea 配置

把下面那个选项勾上

在这里插入图片描述

1.2 修改一下 i18n 对应的文件

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

在这里插入图片描述

二、问题原因

2.1 日志打印位置

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

在这里插入图片描述

2.2 文件对比

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

在这里插入图片描述
在这里插入图片描述

2.3 Properties 读取编码

下面来自 Deepseek 的回答

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

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐