java源文件含中文或特殊字符时,若系统默认编码与源码不一致(如windows默认gbk而源码为utf-8),编译会报“非法字符”等错误;解决方法是用javac -encoding utf-8显式指定编码,且需置于命令最前,推荐统一使用无bom的utf-8。

Java 编译时若源文件含中文或特殊字符,而系统默认编码与源文件不一致(如 Windows 默认 GBK,但源码是 UTF-8),就会报错“非法字符”或“未结束的字符串字面量”。解决方法是在 javac 命令中用 -encoding 参数显式指定源文件的字符编码。
使用 -encoding 指定编码
-encoding 必须放在 javac 命令的最前面(在类名和选项之前),且只对当前编译的源文件生效。它告诉编译器“按这个编码去读取 .java 文件内容”。
- 编译单个 UTF-8 文件:
javac -encoding UTF-8 HelloWorld.java - 编译多个 UTF-8 文件:
javac -encoding UTF-8 A.java B.java C.java - 配合其他选项(如输出目录):
javac -encoding UTF-8 -d bin src/HelloWorld.java
常见编码值要写对
编码名称需符合 Java 规范,大小写不敏感,但推荐用标准写法。常用值包括:
-
UTF-8(最常用,推荐统一使用) -
GBK(Windows 中文系统旧项目可能用) -
ISO-8859-1(西欧字符,较少用于中文源码) -
UTF-16或UTF-16BE/UTF-16LE(极少用,注意 BOM 处理)
错误写法如 utf8、utf_8、GB2312(Java 不识别)可能导致编译器报“不支持的编码”。
IDE 和构建工具中的等效设置
命令行之外,主流开发环境也需对应配置:
- IntelliJ IDEA:File → Settings → Editor → File Encodings → “Project Encoding” 和 “Default encoding for properties files” 设为 UTF-8;同时勾选 “Transparent native-to-ascii conversion”(处理 .properties 文件)
- Eclipse:右键项目 → Properties → Resource → Text file encoding → 选 “Other: UTF-8”
-
Maven:在
pom.xml的maven-compiler-plugin中添加:<configuration><encoding>UTF-8</encoding></configuration> -
Gradle:在
build.gradle中添加:compileJava.options.encoding = "UTF-8"
如何确认源文件真实编码
不要仅凭文件扩展名或编辑器标题栏判断。可借助以下方式验证:
- 用 VS Code、Notepad++ 等编辑器查看右下角显示的编码(如 “UTF-8 with BOM”、“UTF-8 without BOM”)
- 命令行检查(Linux/macOS):
file -i HelloWorld.java或enca HelloWorld.java - Java 编译报错时,如果提示“非法字符:\65279”,大概率是 UTF-8 with BOM —— 建议保存为无 BOM 的 UTF-8
统一使用无 BOM 的 UTF-8 是减少编码问题最稳妥的做法。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











