今天解決了vi命令打開日誌文件中文總是顯示亂碼的問題。由於項目組中的日誌包含一些特殊字元,所以使用vim打開日誌文件時總是不能正確識別出文件字元編碼。此時用:set fileencoding命令可以看出vim把文件編碼識別成latin1。 在這種情況下無論終端設置成gbk還是utf-8編碼,都不能正 ...
今天解決了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設置查看。