有的时候使用gvim查看文本文件时,出现乱码,现在来确定下原因。

  经过我的查资料,发现gvim里有几个关于编码设置的变量:encoding、fileencoding、fileencodings、termencoding。

  我很纳闷,为什么要有这么几个关于编码的设置,一个不就行了??

  encoding:vim内部使用的字符编码方式,包括vim的buffer、菜单文件、消息文本等。

  fileencoding:vim当前编辑的文件的字符编码方式,vim保存文件时也会将文件保存为这种字符编码方式。

  filesencoding:vim自动探测fileencoding的顺序列表,启动时会按照它所列出的字符编码方式逐一探测即将打开的文件字符编码方式,并且将fileencoding设置为最终探测到的字符编码方式。

  Windows 7下创建一个txt,使用gvim打开,默认的设置为:

    termencoding=

    encoding=cp936

    fileencoding=

    fileencodings=ucs-bom

  按照帮助内容说,当termencoding值为空时,取值与encoding一样;当fileencoding值为空时,也与encoding一样。

  来个例子:

  1.新建一个文件后,查看编码设置如下:

    termencoding=

    encoding=cp936

    fileencoding=

    fileencodings=ucs-bom

  2.set fenc=utf-8,然后写入中文字符“编码”,保存并退出,使用二进制编辑器查看文件

 

  很明显,文件保存的格式为utf-8

  3.重新打开文件,结果如下,竟然乱码啦

  4.为什么呢?

  查看编码设置,结果如下:

    termencoding=

    encoding=cp936

    fileencoding=

    fileencodings=ucs-bom

  我想在这里讲一些vim启动时编码设置的知识,首先根据vim配置文件设置各个变量的值,其次,如果encoding和fileencoding不相同,则对文件中的文字进行编码转换然后放入vim buffer中,然后进行显示。在这里呢,因为fileencoding为空,所以默认等于encoding,也就没有对文件中的文字进行编码转换就进行显示,所以出现了乱码。如果在vimrc中设置了fileencoding=utf-8后,我想就不会出现乱码了。

  因为encoding=cp936,即vim buffer的编码方式是cp936,但是实际上buffer里的文字的编码方式为utf-8(没有将utf-8转换为cp936),所以出现乱码

  5.怎么解决呢?

  使用set enc=utf-8,文本即可显示正常,如下图

  6.为什么通过set enc=utf-8就可以解决问题呢?

  设置了enc=utf-8后,vim buffer的编码方式被设置为utf-8,因此和文件的真正编码一样了,正确显示

vim乱码问题的更多相关文章

  1. VIM 乱码终极解决

    原文链接:http://blog.163.com/mageng11@126/blog/static/1408083742012128105645169/ 关于vim乱码,这篇文章讲的很详细,mark一 ...

  2. vim 乱码问题的方法参考

    linux 中设置当前用户的系统默认编码为 UTF-8 格式解决 vim 乱码问题的方法参考  任侠  2013-05-02 11:58  电脑基础  抢沙发  13,732 views  在使用 l ...

  3. centos7 字体库。vim乱码

    centos7 字体库.vim乱码 windows上传文件到centos,需要先使用dos2unix命令进行格式转换 先查看/usr/share下有没有这两个文件 没有的话yum -y install ...

  4. 3、树莓派的配置:改静态IP、连接ssh、安装中文字体、安装谷歌输入法、增加USB电流、修改触摸屏分辨率、扩展sd卡空间、修复vi和vim乱码问题、安装配置远程桌面vnc

    本博文仅作本人操作过程的记录,留作备忘.自强不息 QQ1222698 1.连接上HDMI线,插上触摸屏,插上键盘,鼠标,网线,启动.系统正常启动,但是一直闪烁,不停的黑屏,是由于触摸屏的usb口供电不 ...

  5. CentOS 解决vim乱码问题

    今天在服务器安装了任务调度工具(TaskCTL) 发现是乱码的,看了官方文档说的办法也没有处理成功,可能由于他们已经有一段时间没有维护这个版本了.(以前提供的免费版本) 后来发现CentOS的Vim的 ...

  6. Ubuntu 16.04系统下解决Vim乱码问题

    方法: 打开终端输入:vim /etc/vim/vimrc,进入编辑模式,加入如下配置: set fileencodings=utf-8,gb2312,gbk,gb18030 set termenco ...

  7. 解决 vim 乱码

    打开vim安装目录下的_vimrc,在头部加上几句配置语句就能搞定: //设置默认编码 set encoding=utf-8 set fileencodings=utf-8,chinese,latin ...

  8. [vim]乱码问题

    在vim输入中文乱码 1. 检查系统是否支持中文 locale -a 没有中文支持 安装中文包 apt-get install language-pack-zh-hans -y 2.这样可以输入中文了 ...

  9. vim乱码的解决

    解决vim文件乱码,打开文件乱码,菜单,提示信息乱码: 有四个跟字符编码方式有关的选项,encoding.fileencoding.fileencodings.termencoding 在linux中 ...

随机推荐

  1. SVN中tag branch trunk用法详解

    SVN中tag branch trunk用法详解 2010-05-24 18:32 佚名 字号:T | T 本文向大家简单介绍一下SVN中tag branch trunk用法,SVN中tag bran ...

  2. 在apache2.4版本之前做客户端访问控制,是用Allow Deny Order指令做访问控制的,

    在apache2.4版本之前做客户端访问控制,是用Allow Deny Order指令做访问控制的,而在2.4的版本上是用的用法跟之前的版本大不相同,如下 ###################### ...

  3. checkbox,radio,selected相关操作

    1.radio:单选框 HTML代码: <input type="radio" name="radio" id="radio1" va ...

  4. 使用一个HttpModule拦截Http请求,来检测页面刷新(F5或正常的请求)

    在Web Application中,有个问题就是:“我怎么来判断一个http请求到底是通过按F5刷新的请求还是正常的提交请求?” 相信了解ASP.NET的人知道我在说什么,会有同感,而且这其实不是一个 ...

  5. dojo.create\dojo.place\dojo.empty\dojo.destroy\dojo.body

    1.dojo.create 1.create a node; 2.set attributes on it;  3.place it in the DOM. dojo.create(/*String| ...

  6. dojo.byId、dojo.query、dojo.attr

    概述: dojo.byId(/*string*/id或/*DomNode*/node) 1.传入DOMNode返回传入的domNode; 2.传入id返回id为当前值的domNode dojo.que ...

  7. sql 成绩表 case then

    select * from  dbo.tb_Scroe select Name,(select count(*) from tb_Scroe where Name = t.Name and Scroe ...

  8. Median of Two Sorted Arrays(Java)

    求2个数组的中位数 方法很多 但是时间复杂度各异 1利用数组copy方法先融合两个数组,然后排序,找出中位数 import java.lang.reflect.Array; import java.u ...

  9. apache AH01630: client denied by server configuration错误解决方法

    今天本来是想要在自己本地搭建一个wamp环境用来做一些代码的测试和框架的学习. 鉴于目前工作的时候用到了php5.5,所以就用了wamp-server V2.5版本,安装完成之后配置虚拟主机一直出现4 ...

  10. php 邮件类

    编写一个用php socket 发送邮件的类,简单好用,当用到php程序发送邮件时, 而在163服务器中,可以在RCPT命令中还可以验证163邮箱是否存在,还有很多用处, 我现在暂时还没想到. 记录下 ...