中文亂碼源於編碼不一致(Locale、終端機模擬器、檔案實際編碼、檔案系統掛載參數)。本文分類七大常見場景並給出標準解法。
locale 檢查 LANG=zh_TW.UTF-8 或 en_US.UTF-8。LANG=zh_TW.UTF-8(或 en_US.UTF-8)。:set fileencoding? 查看,:set fileencoding=utf-8 強制重讀。~/.vimrc 設定預設編碼優先順序:set encoding=utf-8
set fileencodings=ucs-bom,utf-8,cp950,big5,euc-jp,latin1
zhcon(框架緩衝中文控制台)或 fbterm + fcitx-fbterm。fbterm@tty1.service。man iptables | col -b > iptables.txt
col -b 過濾倒退鍵/底線等控制字元。
iconv -f cp950 -t utf-8 source.txt > target.txt # 繁體 Big5
iconv -f gbk -t utf-8 source.txt > target.txt # 簡體 GBK
# 批次轉換
find . -name '*.txt' -exec sh -c 'iconv -f cp950 -t utf-8 "$1" > "$1.utf8" && mv "$1.utf8" "$1"' _ {} \;
# FAT32
mount -o iocharset=utf8,codepage=950 /dev/sdb1 /mnt/usb
# NTFS (ntfs-3g)
mount -t ntfs-3g -o iocharset=utf8 /dev/sdb1 /mnt/usb
# /etc/fstab 永久
UUID=xxxx /mnt/usb ntfs-3g defaults,iocharset=utf8 0 0
locale / locale -a 確認系統支援語系。echo $LANG $LC_ALL 確認環境變數。file -bi filename 判斷檔案實際 MIME/編碼。