首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Linux Locale 差異:en_US vs en_US.UTF-8 為何顯示中文亂碼?

     編輯:程式設計疑難解答

現象:`LANG=en_US.UTF-8` 終端顯示中文亂碼,`LANG=en_US` 卻正常。

根本原因:系統不認識 `en_US.UTF-8`,回退預設 locale (通常是 `zh_CN.UTF-8`)

  • `locale -a` 列出系統支援的 locale,若**缺少 `en_US.utf8`**,設定 `LANG=en_US.UTF-8` 會失敗。
  • Glibc 在 locale 無效時,**靜默回退** 到系統預設 locale (安裝時選的語言,通常是中文)。
  • 終端編碼仍為 UTF-8,但輸出內容變成中文 (如日期格式 `2024年01月05日`),終端若非 UTF-8 或字型缺中文 → 亂碼。

驗證與修復


# 1. 查看支援 locale
locale -a | grep en_US
# 若無 en_US.utf8 → 需產生

# 2. 產生 locale (Debian/Ubuntu)
sudo locale-gen en_US.UTF-8
sudo update-locale LANG=en_US.UTF-8

# 3. 重新登入或 source /etc/default/locale

正確行為對照

LANG 設定系統識別實際輸出語言終端顯示
`en_US.UTF-8` (已產生)✅英文 (日期 `Jan 5, 2024`)正常
`en_US.UTF-8` (未產生)❌ 回退中文 (日期 `2024年01月05日`)亂碼 (若終端非 UTF-8)
`en_US` (無編碼後綴)✅ 通常映射 `en_US.ISO-8859-1`英文正常 (單位元編碼)

最佳實踐

  1. 永遠**明確指定編碼後綴** (`.UTF-8`),避免歧義。
  2. 部署腳本加入 `locale-gen en_US.UTF-8 zh_CN.UTF-8` 確保環境一致。
  3. 終端模擬器 (Windows Terminal, PuTTY, MobaXterm) 設定 **UTF-8 編碼 + 含中文字型**。

亂碼本質是 **「locale 無效 → 回退中文 → 編碼不匹配」**,補全 `en_US.UTF-8` locale 即可根治。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved