使用CentOS中的Vim 文本編輯器出現中文亂碼的問題。
凡是字符亂碼的問題,都是字符集不匹配的問題引起的。這里的字符集不匹配只的是文件的編碼和解碼方式不匹配,同時可能涉及到不只一次的解碼過程。
計算機中的所有文件都是以二進制格式存儲的(計算機可識別內容)。我們在讀取文件內容時,均是通過不同的軟件讀取的,軟件在讀取文件內容時,需要使用不同的字符集來識別文件中的人類可識別內容。字符集就是一個數值與人類可識別基礎字符的對照表。
一個文件 有自己的編碼字符集,編輯器在讀取文件時有自己的字符集,在linux系統中還會涉及到終端的顯示字符集。
在Xshell終端中使用Vim打開文件時,中文出現亂碼。分析原因時要考慮:1.文件的原始編碼方式 2.vim打開文件的編碼方式 3. xshell 終端的編碼方式。
在 Vim 中主要有三個和字符集相關的變量: encoding(enc) , fileencoding(fenc) , fileencodings(fencs).
fileencodings:打開文件的時候進行解碼的猜測列表。
fileencoding :用於設置保存文件時使用的字符集。
encoding:用於設置編輯文件時使用的字符集。
例如:可以使用下面的命令
1. :edit ++enc=<encoding> [filename] 以指定的編碼格式重新打開文件。即在這種字符集下編輯文件。
2. :write ++enc=<encoding> [filename] 以指定的編碼格式保存文件。
以上兩種方式是可以暫時 覆蓋 下邊 3.4 兩種方式指定的默認 編輯、寫入時默認的字符集。
3. :set encoding[=<encoding>] 指定編輯文件的字符集。(顯示時)
4. :set fileencoding[=<encoding>] 指定保存文件的字符集。(寫入時)
我們使用vim打開編輯文件時,文件時存在於內存中的,當編輯完成時 使用 :w 命令將內容寫入磁盤,所以會有encoding 和 fileencoding 兩種參數的,分別設置打開文件編輯時及保存內容到硬盤時使用的字符集。
vim 在打開文件是 首先根據變量 fileencodings 中的 字符集類別 猜測正確的字符集,然后將fileencoding 變量設置成選中的字符集。如果fileencodings 沒有設置,選擇用系統的字符集 (locale 命令查看)。之后fileencoding 被設置為此編碼。
使用vim打開一個文件,可以使用 [:set fileencodings] ,[:set fileencoding] , [:set encoding] 查看當前變量的配置信息。
在Centos中配置vim的三個變量:/etc/vimrc 文件中。
參考的文章:
https://spin.atomicobject.com/2011/06/21/character-encoding-tricks-for-vim/
http://www.itnose.net/detail/6487670.html
http://stackoverflow.com/questions/16507777/vim-set-encoding-and-fileencoding-utf-8
http://stackoverflow.com/questions/1174847/how-to-set-the-character-encoding-for-a-file-in-vim
http://www.cnblogs.com/ggjucheng/archive/2012/01/04/2312522.html
http://www.cnblogs.com/jacklikedogs/p/3494566.html
http://www.joelonsoftware.com/articles/Unicode.html
http://blog.sina.com.cn/s/blog_912de1360102wm5p.html
http://www.joelonsoftware.com/articles/Unicode.html