双击运行Jar包控制台中文乱码的根本原因是Windows默认GBK编码解析UTF-8日志,须先执行chcp 65001切换控制台编码为UTF-8,再以-Dfile.encoding=UTF-8启动Java程序,或用含chcp和pause的bat脚本实现一劳永逸。

双击运行Jar包时弹出的控制台窗口中文显示为方块、问号或一堆乱码字符,是因为Windows默认用GBK编码解析UTF-8输出的Java日志,而双击启动又无法像CMD那样手动加参数——必须从源头切断编码错配链。
先确认当前CMD窗口编码
按 Win + R 输入 cmd 回车,立刻执行:
chcp
如果返回结果是 活动代码页:936,说明当前是GBK模式——这正是乱码的起点。别跳过这步,很多用户直接改Java参数却忘了控制台本身不认UTF-8。
临时修复:每次运行前手动切编码+指定JVM参数
在已打开的CMD窗口中,依次执行以下两条命令(顺序不能反):
chcp 65001 → java -Dfile.encoding=UTF-8 -jar your-app.jar
这一步必须先切编码再跑Java。如果反过来,即先跑java再chcp,控制台仍用GBK解码已输出的内容,乱码已发生,不可逆。【chcp 65001 必须在 java 命令之前执行】
注意:65001 是 UTF-8 的代码页编号,不是“65001 utf-8”或“utf8”,输错数字会报错。
一劳永逸:用批处理文件封装两步操作
方法一:基础版(推荐新手)
① 在jar包所在文件夹空白处右键 → 新建 → 文本文档
② 右键编辑该txt,粘贴以下两行内容:
chcp 65001 >nul
java -Dfile.encoding=UTF-8 -jar your-app.jar
③ 将文件名后缀从 .txt 改为 .bat(例如:start.bat),系统提示是否更改时点“是”
方法二:增强版(支持双击后窗口不闪退)
@echo off
chcp 65001 >nul
java -Dfile.encoding=UTF-8 -jar your-app.jar
pause
【pause 是关键】 否则程序一旦结束,黑窗自动关闭,你根本看不到最后一行日志或错误提示。
绕过控制台:把日志导出到UTF-8文本文件
如果你只关心日志内容是否正确,不强求实时看控制台,这条命令最稳:
java -Dfile.encoding=UTF-8 -jar your-app.jar > output.log 2>&1
output.log 文件会以UTF-8保存,用VS Code、Notepad++或新版记事本打开都能正常显示中文。注意不要用老旧XP记事本直接双击打开,它默认用ANSI读取,仍会乱码。

















