很好,这个问题非常典型 👍——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 应用内中文乱码(附带补充)
有时控制台乱码同时伴随网页乱码,这需要:
- 在
server.xml
中添加:<Connector URIEncoding="UTF-8" ... />
- 在 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-8 或 chcp 65001 |
Linux 控制台乱码 | 环境变量未设置 | export JAVA_OPTS="-Dfile.encoding=UTF-8" |
网页乱码 | HTTP 响应头未设 UTF-8 | response.setContentType("text/html;charset=UTF-8") |
Tomcat 日志乱码 | logging.properties 编码不一致 | 确认日志输出流使用 UTF-8 |
发表回复