解決Ubuntu解壓縮 tar 檔中文檔名亂碼問題(20260818更新)
在 Linux 系統中(如 Ubuntu 預設使用 zh_TW.UTF-8),如果收到來自 Windows 或舊系統打包的 .tar 檔,常因為編碼不一致(例如舊系統使用 Big5)而導致解開後檔名變成一堆亂碼。
本文分享如何先快速檢測檔案編碼,並精準將檔名還原為正常中文。
快速預覽與檢測編碼(推薦方法)
直接解壓容易產生亂碼檔名,建議先透過 unar 套件提供的 lsar 工具來測試並預覽編碼。
1. 安裝 unar 工具
sudo apt update
sudo apt install unar
2. 檢測檔名編碼
使用 -pe 參數讓 lsar 自動判斷該 .tar 檔的文字編碼:
$ lsar -pe 20191123.tar
...
191123 ±B§©ú¿o°¼©ç/raw/DSC03528.ARW
191123 ±B§©ú¿o°¼©ç/raw/DSC03528.xmp
Encoding: windows-1252 (50% confidence)
信心度高(如 99%):可以直接使用顯示的編碼。
信心度低(如 50%):代表自動判斷不準,需要手動指定編碼進行 Try-and-Error。
3. 指定編碼預覽 (Try-and-Error)
透過 -e 參數指定不同編碼測試,直到預覽檔名顯示正常中文:
# 嘗試 1: 指定 windows-1252 (仍為亂碼)
$ lsar -e windows-1252 20191123.tar
...
191123 ±B§©ú¿o°¼©ç/raw/DSC03528.ARW
# 嘗試 2: 指定 UTF-8 (顯示轉義字符)
$ lsar -t -e UTF-8 20191123.tar
....
191123 %b1B%c2%a7%a9%fa%bfo%b0%bc%a9%e7/raw/DSC03528.ARW
# 嘗試 3: 指定 BIG5 (檔名恢復正常!)
$ lsar -e BIG5 20191123.tar
...
191123 婚禮明穎側拍/raw/DSC03528.xmp
4. 正確解壓縮
確認編碼為 BIG5 後,直接使用 unar 指定該編碼進行解壓縮即可:
$ unar -e BIG5 20191123.tar
傳統備用方案:先解壓再轉碼 (convmv)
如果你不想使用 unar 解壓,或是已經用原生 tar 指令解出了一堆亂碼資料夾,可以透過以下備用方式處理:
選項 A:使用 convmv 批量轉換檔名編碼
1. 安裝 convmv:
sudo apt install convmv
2. 轉換檔名編碼(從 Big5 轉為 UTF-8):
$ convmv -f big5 -t utf8 -r --notest '亂碼資料夾名稱'
-f big5:來源檔名編碼為 Big5-t utf8:目標檔名編碼轉為 UTF-8-r:遞迴處理子資料夾與內部檔案--notest:實際執行檔名修改(若不加此參數僅會做測試預覽)
註:
tar 沒有類似 zip -O CP950 或 unar -e BIG5 這種直接帶參數指定檔名編碼的功能,要處理非 UTF-8 檔名,使用 unar 是最乾淨俐落的做法。選項 B:讓系統支援 BIG5 語系環境
若系統欠缺 Big5 語系檔,也可手動產生:
1. 修改語系設定檔:
sudo vim /etc/locale.gen
取消註解BIG5:
# 移除BIG5前面的註解
zh_TW BIG5
zh_TW.UTF-8 UTF-8
2. 生成 BIG5 語系檔並確認:
sudo locale-gen
locale -a | grep -i big
# 預期輸出: zh_TW.big5
(註:如果是 Zip 檔案的亂碼問題,請參考之前的 Zip 檔案亂碼處理文章連結 )
留言