現象:Notepad++ 用 ANSI 編碼 → `javac` 不報錯、運行正常,但 **GitHub 網頁顯示亂碼**;用 UTF-8 (含 BOM) → `javac` 報錯 `illegal character: \ufeff`。
根因分析
- **ANSI (Windows 實為 GBK)**:Java 編譯器預設按平台編碼 (GBK) 讀取源碼 → 編譯通過,但 Git 強制以 UTF-8 解碼顯示 → 中文亂碼。
- **UTF-8 with BOM**:檔案開頭 `EF BB BF` 三字節,Java 編譯器視為非法字符 → 編譯失敗。
- **UTF-8 無 BOM**:無 BOM 頭,Java 需顯式指定 `-encoding UTF-8` 讀取 → **編譯通過、GitHub 正常、運行正常**。
標準化流程 (一次配置,永久生效)
- **Notepad++ 設定預設編碼**:
- 選單 **設置 → 偏好設定 → 新建文檔 → 編碼 → 選「UTF-8 無 BOM」** → 勾選「應用於打開的 ANSI 文件」可選。
- **編譯命令固定帶 encoding**:
javac -encoding UTF-8 *.java
# 或建議寫入 build.bat / build.sh / Maven/Gradle 配置
- **運行同樣指定編碼** (可選,避免控制台編碼不一):
java -Dfile.encoding=UTF-8 MainClass
Git 端配置 (防止提交時再轉碼)
git config --global core.autocrlf false
git config --global core.quotepath false
# .gitattributes 強制文本文件 UTF-8
echo "*.java text eol=lf" > .gitattributes
echo "*.xml text eol=lf" >> .gitattributes
避坑提醒
- **不要用 ANSI** 任何情況 (除非維護極老舊 GBK 專案且不上 GitHub)。
- **不要用 UTF-8 with BOM** (Notepad++ 右下角編碼選單區分顯示)。
- IDE (IntelliJ/Eclipse/VS Code) 預設即 UTF-8 無 BOM,**建議遷移至 IDE 開發**,Notepad++ 僅作應急編輯。