很好,这个问题非常典型 👍——Tomcat 控制台输出中文出现乱码,几乎所有中文开发者都踩过这个坑。下面我帮你系统讲清楚根因与彻底解决方法👇


🧩 一、问题本质

Tomcat 控制台乱码的根本原因是:

控制台的输出编码(如 GBK / UTF-8)与 Tomcat 日志或系统编码不一致。

常见症状:

  • 控制台输出是 “???”,或乱码符号;
  • 日志文件中中文正常,但控制台显示乱码;
  • Windows/Linux 行为不同。

⚙️ 二、Tomcat 输出编码原理

Tomcat 启动时,会根据:

  • 系统默认编码(file.encoding);
  • 启动脚本的字符集;
  • 控制台终端编码(Windows 命令行是 GBK,Linux 是 UTF-8);

来决定控制台输出内容的显示方式。
所以要么改 Tomcat 的输出编码,要么改 控制台编码


✅ 三、解决方案(按系统分)

🪟 Windows 环境

✅ 方法 1:修改 Tomcat 启动脚本(推荐)

打开:

<TOMCAT_HOME>\bin\catalina.bat

找到类似:

set JAVA_OPTS=%JAVA_OPTS%

在后面添加:

set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8

或者直接在启动时指定:

startup.bat

改为:

set JAVA_OPTS=-Dfile.encoding=UTF-8
call "%EXECUTABLE%" start %CMD_LINE_ARGS%

📌 效果:所有控制台输出(System.out.println)将以 UTF-8 显示。


✅ 方法 2:修改控制台编码

如果你使用 cmd

chcp 65001

👉 将控制台编码改成 UTF-8,再执行 startup.bat

如果你用的是 PowerShell:

[Console]::OutputEncoding = [System.Text.Encoding]::UTF8


🐧 Linux / macOS 环境

Tomcat 默认使用 UTF-8,只需确保环境变量正确。

✅ 方法 1:在 catalina.sh 中添加

export JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8"

✅ 方法 2:启动时指定

./catalina.sh run -Dfile.encoding=UTF-8

或者在 setenv.sh(推荐方式)中写:

export JAVA_OPTS="-Dfile.encoding=UTF-8"


🧩 四、Web 应用内中文乱码(附带补充)

有时控制台乱码同时伴随网页乱码,这需要:

  1. server.xml 中添加: <Connector URIEncoding="UTF-8" ... />
  2. 在 JSP / Servlet 中确保响应编码: response.setContentType("text/html;charset=UTF-8");

🧠 五、验证方法

你可以写个简单的 Java 测试类验证:

public class EncodingTest {
    public static void main(String[] args) {
        System.out.println(System.getProperty("file.encoding"));
        System.out.println("你好,世界!");
    }
}

✅ 如果输出正确中文且编码为 UTF-8,就说明设置成功。


🚀 总结

场景原因解决方式
Windows 控制台乱码系统默认 GBK-Dfile.encoding=UTF-8chcp 65001
Linux 控制台乱码环境变量未设置export JAVA_OPTS="-Dfile.encoding=UTF-8"
网页乱码HTTP 响应头未设 UTF-8response.setContentType("text/html;charset=UTF-8")
Tomcat 日志乱码logging.properties 编码不一致确认日志输出流使用 UTF-8