根本原因是console encoding与日志框架charset不一致;需在run configurations→common中手动输入utf-8设置console encoding,并确保logback的utf-8或log4j的log4j.appender.console.encoding=utf-8与其严格匹配。

MyEclipse控制台输出中文乱码,根本原因不是“编码没设对”,而是多层编码链路中某一处不匹配——最常出问题的是 Console Encoding 和日志框架的 charset 两处,且二者必须一致。
Run Configuration 中 Console Encoding 必须显式设置
MyEclipse 默认不继承 Workspace 编码,即使你把整个工作区设为 UTF-8,Console Encoding 仍可能沿用系统默认(Windows 下通常是 GBK)。运行时若未手动指定,就会出现 System.out.println("你好") 正常但 log 输出乱码的割裂现象。
- 右键项目 →
Run As→Run Configurations… - 选中对应配置 → 切换到
Common标签页 - 勾选
Encoding下的Other,输入UTF-8(不要选下拉列表里的“UTF-8”,手输更可靠) - 点击
Apply,再Run—— 这步必须做,否则无效
log4j / logback 的 encoder charset 必须与 Console Encoding 严格一致
Log 框架有自己的输出通道,它不看 Eclipse 控制台设置,只认自己配置的 charset。如果 Console Encoding 是 UTF-8,而 logback 的 <charset>GBK</charset>,照样乱码;反之亦然。
- logback.xml 中确认
<encoder></encoder>块内有<charset>UTF-8</charset>(不是encoding属性,是charset子标签) - log4j.properties 中对应项是
log4j.appender.console.encoding=UTF-8,注意 key 名是encoding,不是charset - 如果项目同时用了 slf4j + log4j2,检查
log4j2.xml中<console name="Console"></console>的charset属性值
VM arguments 加 -Dfile.encoding=UTF-8 是保险但非万能
这个参数影响 JVM 读取源文件、读取配置文件、new String(byte[]) 等底层行为,但它**不直接控制 Console 输出编码或 log 框架的 encoder 行为**。在某些老版本 MyEclipse 或混合环境(如嵌入 Tomcat)里,缺它会触发连锁乱码,但它不能替代前两项设置。
- 在
Run Configurations → Arguments → VM arguments里追加:-Dfile.encoding=UTF-8 - 注意:如果项目里硬编码了
new String(bytes, "GBK"),这个参数也救不了 - Tomcat 环境下还需同步检查
server.xml的URIEncoding="UTF-8"和logging.properties的java.util.logging.ConsoleHandler.encoding=utf-8
真正容易被忽略的点是:MyEclipse 的 Console Encoding 设置只对当前 Run Configuration 生效,新建一个配置就得重设一次;而 log 框架的 charset 如果写在 profile-specific 配置里(比如 logback-prod.xml),开发时跑的是 logback-test.xml,就很容易漏改。











