用shell批量編碼轉換

2021-09-23 01:33:48 字數 1605 閱讀 6458

-------------------------------------檔案內容轉換: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編碼...