從windows上傳到linux的文件或者目錄,在Linux系統中顯示為亂碼。雖然將Linux的env設置了LANG=en_US.UTF-8,並且本地的Shell客戶端編碼也設置成UTF-8,但在Shell中(或通過http訪問),仍是亂碼……
原因在於,Windows 的文件名中文編碼默認為GBK,壓縮或者上傳后,文件名還會是GBK編碼,而Linux中默認文件名編碼為UTF8,由於編碼不一致所以導致了文件名亂碼的問題,解決這個問題需要對文件名進行轉碼。
安裝方式1:wget http://pkgs.repoforge.org/convmv/convmv-1.15-1.el6.rf.noarch.rpm
rpm -ivh convmv-1.15-1.el6.rf.noarch.rpm
安裝方式2:yum install convmv
語法:
convmv [options] FILE(S) ... DIRECTORY(S)
主要選項:
1、-f ENCODING
指定目前文件名的編碼,如-f gbk
2、-t ENCODING
指定將要轉換成的編碼,如-f utf-8
3、-r
遞歸轉換目錄下所有文件名
4、--list
列出所有支持的編碼
5、--notest
默認是只打印轉換后的效果,加這個選項才真正執行轉換操作。
常用參數:
-r 遞歸處理子文件夾
–notest 真正進行操作,默認情況下是不對文件進行真實操作
–list 顯示所有支持的編碼
–unescap 可以做一下轉義,比如把%20變成空格
-i 交互模式(詢問每一個轉換,防止誤操作)
convmv 的使用方法:
convmv -f 源編碼 -t 新編碼 [選項] 文件名
使用:/usr/bin/convmv -f gbk -t utf-8 -r --notest /home/wwwroot(要轉碼的文件夾)
inux下有許多方便的小工具來轉換編碼:
文本內容轉換 iconv
文件名轉換 convmv
mp3標簽轉換 python-mutagen
例子:
這樣轉換以后“GBK編碼的文件名”會被轉換成UTF-8編碼(只是文件名編碼的轉換,文件內容不會發生變化)。
注意:不要在NTFS和FAT文件系統中使用此命令,否則可能產生意外結果,如果要在Linux中正確的顯示NTFS和 FAT的中文件名,可以通過mount參數來解決,具體方法參考man手冊。
例子1:
1.遞歸轉換centos目錄下的目前文件名編碼gbk為utf-8:
convmv -f gbk -t utf-8 --notest -r centos
列子2:
convmv -f GBK -t UTF-8 --notest -r mirrors.zzsir.cn/*
(mirrors.zzsir.cn/*為要轉編碼的文件的當前目錄)
例子3
convmv -f GBK -t UTF-8 --notest *.zip
把當前目錄以.zip結尾的文件批量轉碼