解決了一個困擾我近一年的vim顯示中文亂碼的問題

皇家救星發表於2019-01-19

   今天解決了vi命令開啟日誌檔案中文總是顯示亂碼的問題。由於專案組中的日誌包含一些特殊字元,所以使用vim開啟日誌檔案時總是不能正確識別出檔案字元編碼。此時用:set fileencoding命令可以看出vim把檔案編碼識別成latin1。  

  在這種情況下無論終端設定成gbk還是utf-8編碼,都不能正確顯示中文。

  解決方法有兩個:

  1 使用:e ++enc=utf-8命令強制讓vim以utf-8編碼重新開啟檔案 注意:由於我們程式有時也會輸出gbk編碼的中文字元日誌,所以有時還會有少量亂碼。

  2 在開啟檔案前設定好正確的fileencodings(注意這個引數比前面多了一個s,上面的是vim探測出來的檔案編碼,這個是可供vim選擇的檔案編碼列表)

   在~/.vimrc裡面加上一行設定

  set fileencodings=ucs-bom,utf-8,gbk18030

  (我們專案組機器預設的fileencodings是ucs-bom,utf-8,latin1,latin1是一種相容性很強的字元編碼,這樣的設定讓vim很傾向於認為檔案編碼是latin1)  

  總結一下今天學到的vim編碼知識:vim涉及字元顯示的選項有三個,fileencoding檔案字元編碼,encoding緩衝區字元編碼,termencoding終端字元編碼。  

  vim顯示字元的順序:(探測檔案編碼,從fileencodings裡面選擇最合適的編碼賦值給fileencoding)按fileencoding編碼讀取檔案->將讀取到的內容轉成encoding編碼->將encoding編碼轉換成termencoding列印到終端->終端(我們平時主要使用的是securecrt)按設定的編碼(一般是utf8)顯示字元。

  其中fileencoding必須在檔案開啟前設定才有效,encoding必須在vim啟動前設定才有效,termencoding可以根據需要隨時設定。 (之前我一直不知道這幾個設定生效限制,按網上介紹修改過四個編碼,但還是亂碼) 

  這四個編碼如果設定不統一,就很有可能出現中文亂碼問題,其中前三個編碼可以在vim檢視,最後一個編碼需要在securecrt設定檢視。

  

相關文章