中文文件名亂碼問題

此頁由 Linux Wiki使用者Chenxing 於 2016年3月5日 (星期六) 06:07 的最後更改。 在Ehzhou的工作基礎上。

出自Linux Wiki

提示:此文已超过 8 年(3179 天)未更新,如发现内容过时或有误,欢迎改进:)
Note.gif
注意:
本文解決的是文件名或文件夾名的編碼問題,要查看轉換文件內容的選項,請參考iconv工具。更多與亂碼有關的問題,請參閱中文編碼與亂碼問題分類。

中文文件名亂碼產生的原因有二:一是掛載NTFS或FAT文件系統時,編碼指定不正確導致亂碼(或問號);二是在文件系統中文件名存儲的編碼不正確,導致亂碼。二者分別討論:

目錄

NTFS/FAT上的文件名亂碼

如果正在用的Linux系統locale是UTF-8,只需在mount FAT文件系統時加上utf8參數,在mount NTFS文件系統時加上nls=utf8即可,如下例子fstab

LABEL=WinFAT    /media/WIND vfat  defaults,utf8,umask=111,dmask=000 0 0
/dev/sda6 /media/WinNTFS    ntfs  defaults,nls=utf8,umask=0111,dmask=000  0 0

其它情況

有時中文文件名顯示為亂碼,通常可以通過轉換文件名 有時我們需要更改文件名的編碼:

  • 在locale為UTF-8的系統中,解壓含有中文文件名的zip文件,文件名出現亂碼。
  • 將系統Local從GBK遷移到UTF-8
  • 遇到文件名亂碼的其它情形
Note.gif
注意:
千萬不要在NTFS或FAT文件系統上執行convmv,否則極可能產生意外結果。

convmv簡介

convmv存在於常見操作系統的軟體倉庫中。如果當前沒有工具,可以直接安裝。

convmv -f 源编码 -t 新编码 [选项] 文件名

常見有用的選項有:

-r
遞歸處理子文件夾
--notest
真正進行操作,請注意在默認情況下是對文件進行真實操作的,而只是試驗。
--unescape
可以做一下轉義,比如把%20變成空格,如果你不知道這是在做什麼,就不要嘗試了。

實例

一般可解決解壓zip而產生的中文文件名亂碼的步驟:先試著將gbk文件名改為UTF-8:

convmv -f gbk -t utf8 -r MY_DIR

如果確認輸出無誤:

convmv --notest -f gbk -t utf8 -r MY_DIR

處理zip文件亂碼

配合 7z ,可以解決 zip 文件中的中文文件編碼問題。

LC_ALL=C 7z x zip文件名.zip
convmv -f gbk -t utf8 -r dir_path

確認無誤後:

convmv -f gbk -t utf8 -r dir_path --notest

本文对您有帮助?分享给更多朋友!

反馈与讨论

发现文档不全面、有错误却没时间编辑文档?想分享自己的经验或见解?欢迎在此留言、讨论。
简体繁体转换