Vim文本编码之坑

工作原因,需要在windows和linux上同时对代码进行编辑。有时候会出现一个诡异的现象,在linux的vim显示正常的文件,在windows系统中用visual studio打开时提示

File Load  

Some bytes have been replaced with the Unicode substitution character while loading file xxx.f90 with Chinese Simplified (GB2312) encoding. Saving the file will not preserve the original file contents.

打开的文件出现的是一堆乱码。 这究竟是怎么造成的?

 

从字面上看,是这个文件原本是用GB2312进行编码的,但是文件中的一部分是用Unicode编码的。

 

问题就在于windows和Linux 下的vim之间的默认的文本编码的差异。

在Windows里,默认保存的文件,中文的编码格式是GBK编码(cp936)

而在Linux系统中,当用vim打开windows保存的文本文件时,会先尝试用默认的编码格式(UTF-8)去转换,如果出现转换错误,再尝试用vim配置文件中列出的其它编码格式读取。

这个vim配置文件是vimrc,一般位于/usr/share/vim/vimrc。在这个配置文件中,通过设置fileencodings 的值,来告诉vim编辑器依次尝试用这些编码格式打开文件。

 

设想出现如下的情况,

比如在windows下创建一个文本文件,以windows默认的格式(cp936)保存。但是,在linux系统中用vi打开这个文件时,由于某种原因,将其错误地识别成了UTF-8编码。这时候再对文件进行改动,改动部分就会以UTF-8的编码格式写入。之后再在windows下打开这个文件,就会出现乱码的错误。

 

另外,如果用vim打开文件时提示:"xxxx.txt" [第 xx 行无效字符][dos] xxxxL, xxxxC  ,则意味着出现了转换错误。

造成转换错误意味着文件的文本编码不正确。这里的“文本编码不正确”并不一定意味着所有的编码不正确,因为可能出现一个文件用两种编码保存的情况(可能在文件的这一行用的UTF-8对文本进行编码,在这个文件的下一行用GBK编码文本)。可能用vim打开文件时候,一部分文本能正常显示——这部分文本的编码和vim当前的编码一致,但另一部分文本不能正常显示,这时候尝试切换使用不同格式的编码打开文件,有可能使得这部分文本正常显示(原来能正常显示的文本可能因为切换了编码不能正常显示)。

比如以gbk编码打开文件

vi coding_test.f90 -c "e ++enc=gbk"

 

在vi中查看文件的编码

set fileencoding

 

关于中文编码

常见的中文编码有GB2312, GBK, GB13030等。这些带GB*前缀的,是中国定的。其中GB2312历史最早,1980年,支持的汉字字符也最少;GBK 1.0版本是1995年推出的;到了2000年GB18030推出,这一版本除了汉字外,还加入藏、蒙、维等字体

而国际上采用的是UTF编码也支持中文,但是windows下还是默认用的GBK编码。

 

 

参考

常见字符编码扫盲(UTF,Unicode, GB2312) - 四-儿 - 博客园 https://www.cnblogs.com/sier/archive/2011/10/02/5676457.html

在Vim中查看文件编码 - 浮沉一梦 - 博客园 https://www.cnblogs.com/jjzd/p/7380487.html

Vim 编辑器底端 [noeol], [dos] 的含义_王佳伟的博客-CSDN博客 https://blog.csdn.net/strongwangjiawei/article/details/8236703

Vim文本编码之坑

上一篇:linux文件处理命令


下一篇:shell编程之条件测试、if语句和case分支语句