加 -encoding UTF-8 参数有效,是因为Windows下javac默认用GBK读取源文件,而编辑器常保存为UTF-8,两者不匹配导致“不可映射字符”错误;该参数明确指示javac以UTF-8解码,实现编码对齐。

直接在 javac 命令后面加 -encoding UTF-8 参数就能解决。这是最常用、最稳妥的方式,不需要改源文件,也不依赖系统设置。
为什么加这个参数有效
Windows 下 javac 默认用 GBK 读取 .java 文件,但你的编辑器(如 VSCode、Notepad++)默认保存为 UTF-8。两者不一致,编译器就会把 UTF-8 的中文字节当成 GBK 解码,结果出现“不可映射字符”错误。加 -encoding UTF-8 就是明确告诉 javac:“请用 UTF-8 来读这个文件”,一步对齐编码逻辑。
怎么加参数:几种常见用法
-
单个文件编译:
javac -encoding UTF-8 HelloWorld.java -
多个文件(通配符):
javac -encoding UTF-8 *.java -
带输出目录:
javac -encoding UTF-8 -d bin src/*.java -
同时保留调试信息:
javac -encoding UTF-8 -g Main.java
VSCode 用户注意 tasks.json 配置
如果你用 VSCode 的 Java 插件一键编译,它默认不带编码参数。需要手动修改工作区下的 .vscode/tasks.json 文件,在 args 数组里加入两行:
{
"args": [
"-encoding",
"UTF-8",
"${file}"
]
}
保存后重新运行构建任务,中文就能正常编译了。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
立即学习“Java免费学习笔记(深入)”;
不想每次敲参数?设环境变量更省事
在 Windows 系统中,可以永久生效:
- 新建系统环境变量:
JAVA_TOOL_OPTIONS,值为-Dfile.encoding=UTF-8 - 重启终端或命令提示符,之后所有
javac命令都会自动带上 UTF-8 编码行为
注意:这个变量也会影响 java 命令的运行时字符集,对控制台中文输出也有帮助。


















