问题
vi打开GBK编码的文件乱码
原理
Vim有四个跟字符编码方式有关的选项,encoding、fileencoding、fileencodings、termencoding。它们的意义如下:
- encoding(enc):encoding是Vim的内部使用编码,encoding的设置会影响Vim内部的Buffer、消息文字等。在 Unix环境下,encoding的默认设置等于locale;Windows环境下会和当前代码页相同。在中文Windows环境下encoding的 默认设置是cp936(GBK)。
- fileencoding(fencs) :Vim在保存新建文件时会根据fileencoding的设置编码来保存。如果是打开已有文件,Vim会根据打开文件时所识别的编码来保存,除非在保存时重新设置fileencoding。
- termencoding(tenc):在终端环境下使用Vim时,通过termencoding项来告诉Vim终端所使用的编码。
- fileencodings(fenc):Vim在打开文件时会根据fileencodings选项来识别文件编码,fileencodings可以同时设置多个编码,Vim会根据设置的顺序来猜测所打开文件的编码。
方案
vi ~/.vimrc打开文件,填入以下信息:
set fileencodings=utf-8,gbk