有的时候使用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. poj 1986 Distance Queries(LCA)

    Description Farmer John's cows refused to run in his marathon since he chose a path much too long fo ...

  2. 带你走近AngularJS - 创建自己定义指令

    带你走近AngularJS系列: 带你走近AngularJS - 基本功能介绍 带你走近AngularJS - 体验指令实例 带你走近AngularJS - 创建自己定义指令 ------------ ...

  3. 【输入输出挂】【Uva11462】Age Sort

    例题17  年龄排序(Age Sort, UVa 11462)照从小到大的顺序输出. [输入格式] 输入包含多组测试数据.每组数据的第一行为整数n(0<n≤2 000 000),即居民总数:下一 ...

  4. 【HeadFirst 设计模式总结】1.策略模式

    1.书中举了一个鸭子类的设计,有些会飞或者会叫,有些不会飞可能也不会叫,用继承则导致不该有的功能通过继承而继承了下来,使用接口则代码无法做到最大程度的重用.进而引出设计原则1:找出应用中可能需要变化之 ...

  5. android——fragment长时间home或者锁屏java.lang.IllegalArgumentException:No view found for id for....

    在项目中遇到了这个问题.头痛了很久,总是无法重现,也不能很好的解决.总是在息屏后一段时间,就会报java.lang.IllegalArgumentException:No view found for ...

  6. js 的try catch

    语法: try { //在此运行代码 } catch(err) { //在此处理错误 } 注意:try...catch 使用小写字母.大写字母会出错. <script language=&quo ...

  7. Android 判断文件的类型

    import java.util.HashMap; import java.util.Iterator; /** * 判断文件的类型 */ public class MediaFileUtil { p ...

  8. [Linked List]Partition List

    Total Accepted: 53879 Total Submissions: 190701 Difficulty: Medium Given a linked list and a value x ...

  9. 【Android类型SDK测试(二)】环境基础

    (一)语言 Android使用的Java语言,所以要测试Android类型的SDK,Java的基础知识还是需要的. 另外,Android中有NDK类型的编程,需要知道C相关的知识. (二)环境准备 A ...

  10. js 数组排除重复值(string)

    前提:数组中的元素类型为:string 在网上看了许多高大尚的文章,还是解决不了我的string arry 的问题,只能怪自己脑残了,上代码: <!DOCTYPE html> <ht ...