-------------------------------------檔案內容轉換:iconv--------------------------------------
通常,從其他平台拷貝過來(linux)的檔案,比如mac或win,開啟後都是有編碼錯誤的,尤其是中文編碼。
這裡主要是純文字檔案,pdf或者office檔案不談,他們只存在檔名的亂碼,不存在檔案內容的亂碼(因為他門本來就沒有編碼)。
造成的原因很簡單,因為前兩個系統上的文字檔案都是預設gbk編碼格式的,gbk是個主要為中文字型服務的編碼,其中也包含英文本母和數字,因此對於中國使用者來說,gbk編碼就能寫一切的文字了。
iconv命令
iconv命令是個很方便的檔案編碼轉換命令:
usage: iconv [option...] [file...]
主要的用法引數:
-f, --from-code=name encoding of original text
-t, --to-code=name encoding for output
所以通常-f是gbk,-t是utf8
輸出的話,既可以--output也可以輸出重定向『>』到檔案
但是,想要批量的修改檔案編碼,結合find命令和他的-exec選項是個不錯的選擇:
比如:find . -type f -exec iconv {} -f gbk -t utf8 --output ./new/{} \;
就是將目錄下的所有檔案轉化成utf8複製到新的目錄下。
--------------------------------------檔名轉換------------------------------------------
但是,如果想解決檔名亂碼的問題(注意不是檔案內容而是檔名),需要另一條命令:convmv
從linux往
windows拷貝檔案或者從windows往linux拷貝檔案,有時會出現中文檔名亂碼的情況,出現這種問題的原因是因為,windows的檔名 中文編碼預設為gbk,而linux中預設檔名編碼為utf8,由於編碼不一致,所以導致了檔名亂碼的問題,解決這個問題需要對檔名進行轉碼。
在linux中專門提供了一種工具convmv進行檔名編碼的轉換,可以將檔名從gbk轉換成utf-8編碼,或者從utf-8轉換到gbk。
1、先看一下你的系統上是否安裝了convmv,如果沒安裝的話在終端輸入下面的命令安裝:
sudo yum -y install convmv
2、下面看一下convmv的具體用法:
convmv -f 源編碼 -t 新編碼 [選項] 檔名
常用引數:
-r 遞迴處理子資料夾
--notest 真正進行操作,請注意在預設情況下是不對檔案進行真實操作的,而只是試驗。
--list 顯示所有支援的編碼
--unescap 可以做一下轉義,比如把%20變成空格
比如我們有乙個utf8編碼的檔名,轉換成gbk編碼,命令如下:
convmv -f utf-8 -t gbk --notest utf8編碼的檔名
這樣轉換以後"utf8編碼的檔名"會被轉換成gbk編碼(只是檔名編碼的轉換,檔案內容不會發生變化)
shell檔案內容編碼轉換
linux下有時需要對文字檔案的編碼格式進行轉換,下面是在專案中用過的一些shell命令。要想對文字內容的字元編碼進行轉換,具體引數含義 j 轉換為 jis 編碼 iso 2022 jp 預設 e 轉換為 euc 編碼 s 轉換為 shift jis 編碼 w 轉換為 utf 8 編碼 無bom l...
Python實現檔案編碼批量轉換
突然翻出了之前寫的乙份 適用於批量修改乙個目錄及其子目錄下所有指定型別的檔案編碼。使用了python的chardet和codecs庫。coding utf 8 import os,chardet,codecs,re 檔案型別副檔名 檔案列表 filetype,filelist def get fil...
linux下檔案編碼批量轉換
檢視檔案編碼 file i filename 1.遞迴轉換 包括子資料夾 find default type d exec mkdir p utf find default type f exec iconv f gbk t utf 8 o utf 這兩行命令將default目錄下的檔案由gbk編碼...