升级到tomcat10和Java 21后,idea控制台system.out.println输出中文乱码问题

在从 Tomcat 9 升级到 Tomcat 10、Java SDK 从 1.8 升级到 21 的过程中,IDE 控制台 System.out.println 输出中文乱码是常见问题。以下是分步骤解决方案,覆盖配置检查、参数设置、问题验证全流程。

一、检查 IDEA 全局编码设置

确保 IDEA 自身编码配置统一为 UTF-8,避免因工具编码不匹配导致乱码:

  1. 打开 IDEA 配置:File > Settings > Editor > File Encodings

  2. 配置项调整:

  • Global Encoding:设置为 UTF-8

  • Project Encoding:设置为 UTF-8

  • Default encoding for properties files:设置为 UTF-8

  1. 关键勾选:启用 Transparent native-to-ascii conversion(解决 properties 文件中文编码问题)

二、配置 Tomcat 启动参数(关键步骤)

Tomcat 10 基于 Jakarta EE 规范,Java 21 对编码处理更严格,需通过 VM 参数强制统一编码:

  1. 打开 Tomcat 运行配置:Run > Edit Configurations

  2. 选择目标 Tomcat 服务,切换到 VM options 选项卡

  3. 添加以下参数(强制标准输出与系统编码为 UTF-8):

-Dfile.encoding=UTF-8

-Dsun.jnu.encoding=UTF-8
  • 说明:-Dfile.encoding 控制文件与标准输出流编码,-Dsun.jnu.encoding 控制操作系统原生文件名编码,二者结合可解决跨环境编码不一致问题。

三、检查 Tomcat 自身日志编码

Tomcat 自带日志组件的编码若不匹配,也可能影响控制台输出,需调整其配置:

  1. 找到 Tomcat 安装目录:{Tomcat 根目录}/conf/logging.properties

  2. 修改所有日志处理器的编码为 UTF-8,关键配置如下:

\# 控制台日志处理器编码

java.util.logging.ConsoleHandler.encoding = UTF-8

\# 文件日志处理器编码(如存在)

java.util.logging.FileHandler.encoding = UTF-8

四、验证 Java 环境编码是否生效

通过代码打印当前编码,确认配置是否正确应用:

  1. 在项目中添加测试代码:
public class EncodingTest {​
    public static void main(String[] args) {​
        // 打印当前 JVM 编码配置​
        System.out.println("当前 file.encoding:" + System.getProperty("file.encoding"));​
        System.out.println("当前 sun.jnu.encoding:" + System.getProperty("sun.jnu.encoding"));​
        // 测试中文输出​
        System.out.println("中文输出测试:这是一段标准输出流的中文内容");​
    }​
}
  1. 运行代码后观察控制台:
  • 若输出的 file.encodingUTF-8,说明 VM 参数已生效;

  • 若仍为其他编码(如 GBK),需重新检查 IDEA Tomcat 配置是否保存,或是否存在配置覆盖问题。

五、强制 Tomcat 对标准输出流编码

Tomcat 10 中,System.out 的输出会被重定向到 Tomcat 的日志系统,需额外配置重定向时的编码:
找到 Tomcat 安装目录下的 bin/catalina.bat(Windows)或 bin/catalina.sh(Linux)。
编辑文件,在开头位置添加如下配置(强制标准输出流编码为 UTF-8):
bash

Windows(catalina.bat)

set JAVA_OPTS=%JAVA_OPTS% -Dstdout.encoding=UTF-8 -Dstderr.encoding=UTF-8

Linux(catalina.sh)

JAVA_OPTS="$JAVA_OPTS -Dstdout.encoding=UTF-8 -Dstderr.encoding=UTF-8"

这两个参数专门控制标准输出(System.out)和标准错误(System.err)的编码,优先级高于 file.encoding。

六、清理 IDEA 缓存并重启

IDEA 缓存可能导致配置修改后不生效,需强制清理并重启:

  1. 打开 IDEA 菜单:File > Invalidate Caches...

  2. 在弹出窗口中选择 Invalidate and Restart(清理缓存并重启 IDEA)

  3. 重启后重新运行项目,验证中文输出是否正常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值