踩坑實(shí)錄!Java 編譯中文注釋報(bào)錯(cuò)?一行命令搞定 GBK/UTF-8 編碼問題
作為 Java 新手,你是不是也遇到過這種情況:寫了個(gè)簡單的 99 乘法表代碼,里面加了幾句中文注釋,結(jié)果編譯時(shí)一堆 “編碼 GBK 的不可映射字符” 報(bào)錯(cuò),明明代碼邏輯沒問題,卻卡了半天?
今天就以我剛踩過的坑為例,手把手教你解決這個(gè)新手高頻問題,看完再也不用被編碼問題折磨!
一、先看現(xiàn)場:編譯 99 乘法表的翻車現(xiàn)場
先貼一下我當(dāng)時(shí)的報(bào)錯(cuò)截圖(命令行實(shí)錄):
PS D:\g_java_pj_01\src> javac .\MultiplicationTable.java
.\MultiplicationTable.java:3: 錯(cuò)誤: 編碼 GBK 的不可映射字符 (0xB0)
// 澶栧眰寰幆鎺у埗涔樻暟錛堜粠1鍒?9錛夛紝瀵瑰簲涔樻硶琛ㄧ殑琛屾暟
^
.\MultiplicationTable.java:5: 錯(cuò)誤: 編碼 GBK 的不可映射字符 (0x8E)
// 鍐呭眰寰幆鎺у埗琚箻鏁幫紙浠?1鍒板綋鍓嶈鏁癷錛夛紝瀵瑰簲姣忚鐨勫垪鏁?
^
# 省略剩余5個(gè)類似報(bào)錯(cuò)...
7 個(gè)錯(cuò)誤
看著滿屏的亂碼 + 報(bào)錯(cuò),是不是瞬間懵了?明明注釋寫的是 “外層循環(huán)控制乘數(shù)”,怎么變成了 “澶栧眰寰幆鎺у埗涔樻暟”?
二、為啥會(huì)報(bào)錯(cuò)?核心原因就一個(gè)
其實(shí)問題根本不在代碼,而在編碼格式不匹配:
- Windows 系統(tǒng)下,
javac(Java 編譯器)默認(rèn)使用GBK 編碼讀取文件; - 我們寫代碼時(shí),編輯器(VS Code/Notepad++/IDEA)默認(rèn)保存文件為UTF-8 編碼;
- 當(dāng)文件里有中文時(shí),GBK 編碼無法解析 UTF-8 格式的中文字符,就會(huì)出現(xiàn) “不可映射字符” 報(bào)錯(cuò),注釋也變成了亂碼。
簡單說:編譯器用 “GBK 字典” 去查 “UTF-8 文字”,自然不認(rèn)識(shí),直接報(bào)錯(cuò)!
三、解決方案:兩步搞定,新手也能秒會(huì)
方案 1:編譯時(shí)指定編碼(推薦!無需改文件)
這是最便捷的方法,只需要在javac命令后加一個(gè)編碼參數(shù),告訴編譯器 “我這個(gè)文件是 UTF-8 編碼的”:
javac -encoding UTF-8 MultiplicationTable.java
我當(dāng)時(shí)執(zhí)行完這個(gè)命令,命令行啥報(bào)錯(cuò)都沒有,直接編譯成功!接著運(yùn)行代碼:
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(一勞永逸)
如果不想每次編譯都加參數(shù),可以把文件編碼改成 GBK,適配編譯器默認(rèn)設(shè)置:
- 用 Notepad++ 打開代碼文件;
- 頂部菜單:編碼 → 轉(zhuǎn)為 GBK 編碼(或 GB2312);
- 保存后直接編譯:
javac .\MultiplicationTable.java,無需加參數(shù)。
(VS Code 操作同理:右下角點(diǎn)擊編碼→通過編碼保存→選擇 GBK 即可)
四、附贈(zèng):可直接運(yùn)行的 99 乘法表代碼(UTF-8 版)
怕新手踩代碼邏輯的坑,貼一份我調(diào)試好的完整代碼,復(fù)制就能用:
運(yùn)行
public class MultiplicationTable {
public static void main(String[] args) {
// 外層循環(huán)控制乘數(shù)(從1到9),對應(yīng)乘法表的行數(shù)
for (int i = 1; i <= 9; i++) {
// 內(nèi)層循環(huán)控制被乘數(shù)(從1到當(dāng)前行數(shù)i),對應(yīng)每行的列數(shù)
for (int j = 1; j <= i; j++) {
// 格式化輸出,讓排版更整齊
System.out.printf("%d×%d=%-2d ", j, i, i * j);
}
// 每行結(jié)束后換行
System.out.println();
}
}
}
編譯運(yùn)行步驟:
- 復(fù)制代碼保存為
MultiplicationTable.java; - 執(zhí)行
javac -encoding UTF-8 MultiplicationTable.java; - 執(zhí)行
java MultiplicationTable,即可看到整齊的乘法表。
五、新手避坑總結(jié)
- 中文注釋編譯報(bào)錯(cuò),99% 是UTF-8 和 GBK 編碼不匹配導(dǎo)致;
- 快速解決:編譯時(shí)加
-encoding UTF-8參數(shù),一行命令搞定; - 長期解決:將文件編碼轉(zhuǎn)為 GBK,適配 Windows 下 javac 的默認(rèn)設(shè)置。
其實(shí) Java 新手遇到的很多問題都不是邏輯問題,而是環(huán)境 / 編碼這種 “小細(xì)節(jié)”,踩過一次坑,下次就再也不會(huì)卡殼了!
我專注分享 Java 新手避坑指南和編程實(shí)戰(zhàn)技巧。如果這篇文章幫到了你,別忘了點(diǎn)贊 + 收藏,后續(xù)會(huì)持續(xù)更新更多新手友好的編程干貨,一起從 0 開始學(xué) Java~