有的时候使用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. DeNA/上海纵游通过使用AWS大量缩短新款游戏和服务的上线时间

    关于DeNA/上海纵游 DeNA 创立于1999年,是世界率先的网络服务公司,业务涵盖社交游戏.电子商务等领域.DeNA总部设于东京,现已于京证券交易所上市(交易代码:2432),在中国.美国.新加坡 ...

  2. 实现怎样支持Android重力感应器Sensor编程

    添加当重力变化时的处理函数 在创建监听器时调用的函数 doSomething(x, y, z) 是自己定义的方法. 当手机倾斜方向改变时,监听器会调用该方法. 我们要做的,就是填充该方法,用于在重力发 ...

  3. crm使用soap更改下拉框的文本值

    //C#代码 //UpdateStateValueRequest updateStateValue = new UpdateStateValueRequest //{ //    AttributeL ...

  4. Oracle SQL函数之转换函数To_char汇总

    TO_CHAR(x[[,c2],C3])[功能]将日期或数据转换为char数据类型[参数]x是一个date或number数据类型.c2为格式参数c3为NLS设置参数如果x为日期nlsparm=NLS_ ...

  5. AAC ADTS解析

    1.ADTS ADTS全称是(Audio Data Transport Stream),是AAC的一种十分常见的传输格式. 一般的AAC解码器都需要把AAC的ES流打包成ADTS的格式,一般是在AAC ...

  6. 深入浅出SlidingMenu

    如果想直接查看源码的话可以从我的Github上下载查看:https://github.com/zhanghuijun0/demo-for-android/tree/master/SlidingMenu ...

  7. c++如何生成随机数

    一.使用rand()函数 头文件<stdlib.h> (1)  如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_ ...

  8. React-Native post和get请求

    post: fetchData (title) { fetch(REQUEST_URL, { method: 'POST', headers: { 'Accept': 'application/jso ...

  9. HtmlHelp

    @Html.Label("Label", "Label") @*渲染成<label for="Label">Label</ ...

  10. trangleProble switch方法 java

    public class trangleProblem { static int res=1; int codePart=1; int n=100; Stack<Param> stack= ...