LINUX下檔案內容以及檔名字符集

2021-07-24 05:33:09 字數 3004 閱讀 9620

如果要在linux中操作windows下的檔案,那麼會經常遇到檔案編碼轉換的問題。windows中預設的檔案格式是 gbk(gb2312),而linux一般都是utf-8。下面介紹一下,在linux中如何檢視檔案的編碼及如何進行對檔案進行編碼轉換。檢視檔案編碼在linux中檢視檔案編碼可以通過以下幾種方式:

1、在vim中檢視檔案編碼 :set fileencoding 即可顯示檔案編碼格式。如果只是想檢視其它編碼格式的檔案或者想解決用vim檢視檔案亂碼的問題,那麼可以在 ~/.vimrc 檔案中新增以下內容: set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936 這樣,就可以讓vim自動識別檔案編碼(可以自動識別utf-8或者gbk編碼的檔案),其實就是依照fileencodings提供的編碼列表嘗試,如果沒有找到合適的編碼,就用latin-1(ascii)編碼開啟。

轉換檔案編碼的方式

1、在vim中直接轉換檔案編碼:

比如將乙個檔案轉換成utf-8格式 :set fileencoding=utf-8 。

2. iconv命令 轉換

iconv的命令格式如下: 

iconv -f encoding -t encoding inputfile。 比如將乙個utf-8 編碼的檔案轉換成gbk編碼 ,其格式為:iconv -f gbk -t utf-8 file1 -o file2

檔名編碼轉換

從linux往 windows拷貝檔案或者從windows往linux拷貝檔案,有時會出現中文檔名亂碼的情況,出現這種問題的原因是:windows的檔名中文編碼預設為gbk,而linux中預設檔名編碼為utf8,由於編碼不一致,所以導致了檔名亂碼的問題,解決這個問題需要對檔名進行轉碼。在linux中專門提供了一種工具convmv進行檔名編碼的轉換,可以將檔名從gbk轉換成utf-8編碼,或者從utf-8轉換到gbk。首先看一下你的系統上是否安裝了convmv,如果沒安裝的話用:yum -y install convmv 安裝。

下面看一下convmv的具體用法: convmv -f 源編碼 -t 新編碼 [選項] 檔名

常用引數:

-r 遞迴處理子資料夾

--notest 真正進行操作,請注意在預設情況下是不對檔案進行真實操作的,而只是試驗。

--list 顯示所有支援的編碼

--unescap 可以做一下轉義,比如把 變成空格。

如我們有乙個utf8編碼的檔名,轉換成gbk編碼,命令如下: convmv -f utf-8 -t gbk --notest utf8編碼的檔名 這樣轉換以後"utf8編碼的檔名"會被轉換成gbk編碼(只是檔名編碼的轉換,檔案內容不會發生變化)。

* encoding: vim 內部使用的字元編碼方式,包括 vim 的 buffer (緩衝區)、選單文字、訊息文字等。預設是根據你的locale選擇.使用者手冊上建議只在 .vimrc 中改變它的值,事實上似乎也只有在.vimrc 中改變它的值才有意義。可以用另外一種編碼來編輯和儲存檔案,如你的vim的encoding為utf-8,所編輯的檔案採用cp936編碼,vim會自動將讀入的檔案轉成utf-8(vim的能讀懂的方式),而當你寫入檔案時,又會自動轉回成cp936(檔案的儲存編碼).

* fileencoding: vim 中當前編輯的檔案的字元編碼方式,vim 儲存檔案時也會將檔案儲存為這種字元編碼方式 (不管是否新檔案都如此)。

* fileencodings: vim自動探測fileencoding的順序列表,啟動時會按照它所列出的字元編碼方式逐一探測即將開啟的檔案的字元編碼方式,並且將 fileencoding 設定為最終探測到的字元編碼方式。因此最好將unicode 編碼方式放到這個列表的最前面,將拉丁語系編碼方式 latin1 放到最後面。

* termencoding: vim 所工作的終端 (或者 windows 的 console 視窗) 的字元編碼方式。如果vim所在的term與vim編碼相同,則無需設定。如其不然,你可以用vim的termencoding選項將自動轉換成term 的編碼.這個選項在 windows 下對我們常用的 gui 模式的 gvim 無效,而對 console 模式的vim 而言就是 windows 控制台的**頁,並且通常我們不需要改變它。

好了,解釋完了這一堆容易讓新手犯糊塗的引數,我們來看看 vim 的多字元編碼方式支援是如何工作的。

1. vim 啟動,根據 .vimrc 中設定的 encoding 的值來設定 buffer、選單文字、訊息文的字元編碼方式。

2. 讀取需要編輯的檔案,根據 fileencodings 中列出的字元編碼方式逐一探測該檔案編碼方式。並設定 fileencoding 為探測到的,看起來是正確的 (注1) 字元編碼方式。

3. 對比 fileencoding 和 encoding 的值,若不同則呼叫 iconv 將檔案內容轉換為encoding 所描述的字元編碼方式,並且把轉換後的內容放到為此檔案開闢的 buffer 裡,此時我們就可以開始編輯這個檔案了。注意,完成這一步動作需要呼叫外部的 iconv.dll(注2),你需要保證這個檔案存在於 $vimruntime 或者其他列在 path 環境變數中的目錄裡。

4. 編輯完成後儲存檔案時,再次對比 fileencoding 和 encoding 的值。若不同,再次呼叫 iconv 將即將儲存的 buffer 中的文字轉換為 fileencoding 所描述的字元編碼方式,並儲存到指定的檔案中。同樣,這需要呼叫 iconv.dll由於 unicode 能夠包含幾乎所有的語言的字元,而且 unicode 的 utf-8 編碼方式又是非常具有價效比的編碼方式 (空間消耗比 ucs-2 小),因此建議 encoding 的值設定為utf-8。這麼做的另乙個理由是 encoding 設定為 utf-8 時,vim 自動探測檔案的編碼方式會更準確 (或許這個理由才是主要的 ;)。我們在中文 windows 裡編輯的檔案,為了兼顧與其他軟體的相容性,檔案編碼還是設定為 gb2312/gbk 比較合適,因此 fileencoding 建議設定為 chinese (chinese 是個別名,在 unix 裡表示 gb2312,在 windows 裡表示cp936,也就是 gbk 的**頁)。

Linux windows下檔名和內容亂碼

一 利用iconv命令進行編碼轉換檔案內容編碼轉換 iconv命令用於轉換指定檔案的編碼,預設輸出到標準輸出裝置,亦可指定輸出檔案。用法 iconv 選項.檔案.有如下選項可用 輸入 輸出格式規範 f,from code 名稱 原始文字編碼 t,to code 名稱 輸出編碼 資訊 l,list 列...

linux檔名匹配

匹配檔名中的任何字串,包括空字串。匹配檔名中的任何單個字元。匹配 中所包含的任何字元。匹配 中非感嘆號!之後的字元。如 s s開頭的所有字串 s s結尾的所有字串 s?以s為倒數第二個字元的字串 0 9 所有以數字的字元 a,b a或者b 0 9 不是數字的字元 ls user a n sh 列出 ...

linux下檔名後面帶有波浪號( )

通過文字編輯器,如gedit開啟檔案,會生成乙個相同檔名 波浪號的檔案。這個帶波浪號的檔案是gedit的備份檔案。可以通過以下命令刪除目錄下所有的這類備份檔案 plain view plain copy rm fr f 忽略不存在的檔案,不給出提示 r 目錄中與子目錄中所有的符合條件檔案都刪除 取消...