控制台输出中文乱码的根源是jvm未指定utf-8编码,需在run/debug configurations的vm options中添加-dfile.encoding=utf-8(大小写敏感、带短横),并确保file encodings三处均为utf-8且勾选transparent native-to-ascii conversion。

控制台输出中文乱码:先看 Run/Debug Configurations 里的 VM options
绝大多数人遇到的“System.out.println("你好") 输出乱码”,根源就在这里。IDEA 启动 JVM 时没告诉它用 UTF-8 解码,JVM 就按系统默认编码(Windows 常是 GBK)去读字节,自然错位。
操作路径:Run → Edit Configurations… → Templates → Application(改模板可一劳永逸),在 VM options 栏填入:-Dfile.encoding=UTF-8。
常见错误:
- 只改了某个具体 Run Configuration,新创建的 Main 方法又乱码——必须改
Templates → Application - 写了
-Dfile.encoding=utf8(少个连字符或大小写错)——必须是UTF-8,大小写敏感,带短横 - 没重启已运行的程序——改完要重新
Run,不是仅保存配置
Tomcat 日志乱码:别只动 IDEA,logging.properties 和 catalina.sh/bat 都得同步
外置 Tomcat 的日志乱码,光在 IDEA 的 VM options 里加 -Dfile.encoding=UTF-8 不够。因为 Tomcat 自己的日志处理器(java.util.logging.ConsoleHandler)会忽略 JVM 全局编码,只认自己的配置。
两处必须同时改:
-
TOMCAT_HOME/conf/logging.properties中,把java.util.logging.ConsoleHandler.encoding的值明确设为UTF-8(不能留空或写${...}) -
TOMCAT_HOME/bin/catalina.sh(Linux/macOS)或catalina.bat(Windows)中,在JAVA_OPTS里追加-Dfile.encoding=UTF-8
注意:如果用的是 IDEA 内嵌 Tomcat(即 “Application server” 选的是 “Local”),那只需改 IDEA 配置里的 VM options,不用碰 Tomcat 安装目录。
文件编辑器和属性文件乱码:File Encodings 三处必须一致,且勾选 Transparent native-to-ascii conversion
代码里中文注释、.properties 文件里的 name=张三 显示为 name=\u5f20\u4e09 或直接方块,说明编辑器读取时解码错了。
进 File → Settings → Editor → File Encodings,确认以下三项全为 UTF-8:
Global EncodingProject EncodingDefault encoding for properties files
最关键的是勾选 Transparent native-to-ascii conversion —— 不勾它,.properties 文件里的中文会被自动转成 \uXXXX 形式保存,下次打开就再也还原不了原始中文。
idea64.exe.vmoptions 是兜底项,但加错位置或漏重启等于白干
当以上都试过还乱码,说明 IDEA 自身启动 JVM 时编码就错了。这时要改 IDEA 的启动参数文件。
路径:IDEA_INSTALL_DIR/bin/idea64.exe.vmoptions(Windows/macOS/Linux 新版统一用这个),在**最后一行**添加:
-Dfile.encoding=UTF-8
注意点:
- 不能加在中间或注释行里,必须是独立一行
- 改完必须彻底退出 IDEA(右上角 × 关闭所有窗口,任务栏进程也要杀干净),再重开
- 如果用的是 JetBrains Toolbox 管理的 IDEA,改的是 Toolbox 下载的那个安装目录下的文件,不是旧版本残留路径
真正容易被忽略的,是 .idea/encodings.xml 这个隐藏文件——它会为单个文件强制指定编码。一旦里面混入了 GBK 或空值,整个项目部分文件就会顽固乱码。删掉它,重启 IDEA,让 IDE 重新按全局设置推导编码。











