1. 程式人生 > >linux-linux環境下ANSI轉換為UTF-8

linux-linux環境下ANSI轉換為UTF-8

使用vim開啟linux文字檔案,發現亂碼。

1. 查詢檔案的編碼格式

在Vim中可以直接檢視檔案編碼,
:set fileencoding
即可顯示檔案編碼格式。

[root@cdh01 2018-05-02]# vim 遺留問題1.txt
1¡¢×îºóÐÞ¸Äʱ¼äͬ²½                                                                                                     
:set fileencoding

[root@cdh01 2018-05-02]# vim 遺留問題1.txt
1
¡¢×îºóÐÞ¸Äʱ¼äͬ²½ fileencoding=latin1

發現編碼格式為latin1。

2.Vim編碼的詳細介紹

  Vim和所有的流行文字編輯器一樣,Vim可以很好的編輯各種字元編碼的檔案,這當然包括UCS-2,UTF-8 等流行的Unicode編碼方式。
  Vim有四個跟字元編碼方式有關的選項,encoding、fileencoding、fileencodings、termencoding (這些選項可能的取值請參考Vim線上幫助:help encoding-names),它們的意義如下:
  (1
)encoding:Vim內部使用的字元編碼方式,包括Vim的 buffer(緩衝區)、選單文字、訊息文字等。使用者手冊上建議只在.vimrc中改變它的值,事實上似乎也只有在.vimrc中改變它的值才有意義。 (2)fileencoding:Vim中當前編輯的檔案的字元編碼方式,Vim儲存檔案時也會將檔案儲存為這種字元編碼方式(不管是否新檔案都如此),網上是這樣介紹的,但是我這樣做在.vimrc中定義為utf-8似乎沒有作用,只能在開啟vim檔案時手動設定才會起效,不知道什麼原因。 (3)fileencodings:Vim啟動時會按照它所列出的字元編碼方式逐一探測即將開啟的檔案的字元編碼方式,並且將fileencoding設定為最終探測到的字元編碼方式。因此最好將Unicode
編碼方式放到這個列表的最前面,將拉丁語系編碼方式latin1放到最後面。 (4)termencoding:Vim所工作的終端(或者Windows的Console視窗)的字元編碼方式。這個選項在 Windows下對我們常用的GUI模式的gVim無效,而對Console模式的Vim而言就是Windows控制檯的內碼表,並且通常我們不需要改變它。 再來記錄一下Vim的多字元編碼方式支援是如何工作的。 (1)Vim啟動,根據.vimrc中設定的encoding的值來設定buffer、選單文字、訊息文的字元編碼方式。 (2)讀取需要編輯的檔案,根據fileencodings中列出的字元編碼方式逐一探測該檔案編碼方式。並設定 fileencoding為探測到看起來是正確的字元編碼方式,如果沒有找到合適的編碼,就用latin-1(ASCII)編碼開啟。 (3)對比fileencoding和encoding的值,若不同則呼叫iconv將檔案內容轉換為encoding所描述的字元編碼方式,並且把轉換後的內容放到為此檔案開闢的buffer裡,此時我們就可以開始編輯這個檔案了。 (4)編輯完成後儲存檔案時,再次對比fileencoding和encoding的值。若不同,再次呼叫iconv將即將儲存的buffer中的文字轉換為fileencoding所描述的字元編碼方式,並儲存到指定的檔案中。 由於Unicode能夠包含幾乎所有的語言的字元,而且Unicode的UTF-8編碼方式又是非常具有價效比的編碼方式(空間消耗比UCS-2小),因此建議encoding的值設定為utf-8。這麼做的另一個理由是encoding設定為utf-8時,Vim自動探測檔案的編碼方式會更準確 (或許這個理由才是主要的;) 。我們在中文Windows裡編輯的檔案,為了兼顧與其他軟體的相容性,檔案編碼還是設定為GB2312/GBK比較合適,因此 fileencoding建議設定為chinese(chinese是個別名,在Unix裡表示gb2312,在Windows裡表示 cp936,也就是GBK的內碼表)。

3.文字編碼轉換

方案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
[root@cdh01 2018-05-02]# iconv -c -f gb2312 -t utf-8 -o 遺留問題1.txt 遺留問題1.txt 
[root@cdh01 2018-05-02]# vim 遺留問題1.txt

1、最後修改時間同步

"遺留問題1.txt" [noeol] 1L, 28C        

不亂碼,解決。