踩坑实录!Java 编译中文注释报错?一行命令搞定 GBK/UTF-8 编码问题
作为 Java 新手,你是不是也遇到过这种情况:写了个简单的 99 乘法表代码,里面加了几句中文注释,结果编译时一堆 “编码 GBK 的不可映射字符” 报错,明明代码逻辑没问题,却卡了半天?
今天就以我刚踩过的坑为例,手把手教你解决这个新手高频问题,看完再也不用被编码问题折磨!
一、先看现场:编译 99 乘法表的翻车现场
先贴一下我当时的报错截图(命令行实录):
PS D:\g_java_pj_01\src> javac .\MultiplicationTable.java
.\MultiplicationTable.java:3: 错误: 编码 GBK 的不可映射字符 (0xB0)
// 澶栧眰寰幆鎺у埗涔樻暟锛堜粠1鍒?9锛夛紝瀵瑰簲涔樻硶琛ㄧ殑琛屾暟
^
.\MultiplicationTable.java:5: 错误: 编码 GBK 的不可映射字符 (0x8E)
// 鍐呭眰寰幆鎺у埗琚箻鏁帮紙浠?1鍒板綋鍓嶈鏁癷锛夛紝瀵瑰簲姣忚鐨勫垪鏁?
^
# 省略剩余5个类似报错...
7 个错误
看着满屏的乱码 + 报错,是不是瞬间懵了?明明注释写的是 “外层循环控制乘数”,怎么变成了 “澶栧眰寰幆鎺у埗涔樻暟”?
二、为啥会报错?核心原因就一个
其实问题根本不在代码,而在编码格式不匹配:
- Windows 系统下,
javac(Java 编译器)默认使用GBK 编码读取文件; - 我们写代码时,编辑器(VS Code/Notepad++/IDEA)默认保存文件为UTF-8 编码;
- 当文件里有中文时,GBK 编码无法解析 UTF-8 格式的中文字符,就会出现 “不可映射字符” 报错,注释也变成了乱码。
简单说:编译器用 “GBK 字典” 去查 “UTF-8 文字”,自然不认识,直接报错!
三、解决方案:两步搞定,新手也能秒会
方案 1:编译时指定编码(推荐!无需改文件)
这是最便捷的方法,只需要在javac命令后加一个编码参数,告诉编译器 “我这个文件是 UTF-8 编码的”:
javac -encoding UTF-8 MultiplicationTable.java
我当时执行完这个命令,命令行啥报错都没有,直接编译成功!接着运行代码:
PS D:\g_java_pj_01\src> java MultiplicationTable
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
# 省略剩余输出...
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
完美输出 99 乘法表,问题直接解决!
方案 2:修改文件编码为 GBK(一劳永逸)
如果不想每次编译都加参数,可以把文件编码改成 GBK,适配编译器默认设置:
- 用 Notepad++ 打开代码文件;
- 顶部菜单:编码 → 转为 GBK 编码(或 GB2312);
- 保存后直接编译:
javac .\MultiplicationTable.java,无需加参数。
(VS Code 操作同理:右下角点击编码→通过编码保存→选择 GBK 即可)
四、附赠:可直接运行的 99 乘法表代码(UTF-8 版)
怕新手踩代码逻辑的坑,贴一份我调试好的完整代码,复制就能用:
运行
public class MultiplicationTable {
public static void main(String[] args) {
// 外层循环控制乘数(从1到9),对应乘法表的行数
for (int i = 1; i <= 9; i++) {
// 内层循环控制被乘数(从1到当前行数i),对应每行的列数
for (int j = 1; j <= i; j++) {
// 格式化输出,让排版更整齐
System.out.printf("%d×%d=%-2d ", j, i, i * j);
}
// 每行结束后换行
System.out.println();
}
}
}
编译运行步骤:
- 复制代码保存为
MultiplicationTable.java; - 执行
javac -encoding UTF-8 MultiplicationTable.java; - 执行
java MultiplicationTable,即可看到整齐的乘法表。
五、新手避坑总结
- 中文注释编译报错,99% 是UTF-8 和 GBK 编码不匹配导致;
- 快速解决:编译时加
-encoding UTF-8参数,一行命令搞定; - 长期解决:将文件编码转为 GBK,适配 Windows 下 javac 的默认设置。
其实 Java 新手遇到的很多问题都不是逻辑问题,而是环境 / 编码这种 “小细节”,踩过一次坑,下次就再也不会卡壳了!
我专注分享 Java 新手避坑指南和编程实战技巧。如果这篇文章帮到了你,别忘了点赞 + 收藏,后续会持续更新更多新手友好的编程干货,一起从 0 开始学 Java~