踩坑實(shí)錄!Java 編譯中文注釋報(bào)錯(cuò)?一行命令搞定 GBK/UTF-8 編碼問題

踩坑實(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è)置:

  1. 用 Notepad++ 打開代碼文件;
  2. 頂部菜單:編碼 → 轉(zhuǎn)為 GBK 編碼(或 GB2312);
  3. 保存后直接編譯: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)行步驟:

  1. 復(fù)制代碼保存為MultiplicationTable.java;
  2. 執(zhí)行javac -encoding UTF-8 MultiplicationTable.java
  3. 執(zhí)行java MultiplicationTable,即可看到整齊的乘法表。

五、新手避坑總結(jié)

  1. 中文注釋編譯報(bào)錯(cuò),99% 是UTF-8 和 GBK 編碼不匹配導(dǎo)致;
  2. 快速解決:編譯時(shí)加-encoding UTF-8參數(shù),一行命令搞定;
  3. 長期解決:將文件編碼轉(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~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容