首先必需要明白一点,sublime无论以什么编码格式打开文本(以什么编码格式来理解文本文件中的二进制数据),都会把它转为utf-8再显示到屏幕中,这个过程称作解码。其实不当当是sublime,其实任何的程序软件,解码过程都是这样的,只不过有的解码之后不一定是转为utf-8,比如python 2.x就是转为ascii,python 3为了扩展适用性,也改成转为utf-8了。

  明白了什么叫解码,我们再来看sublime是怎么加载文本和保存文本。刚刚已经说了,加载文本(也就是常说的打开文本)就是一个解码的过程,那么保存文本呢?sublime保存文本就是将当前操作的文本(之前已经在加载进来的时候进过了解码,所以一定是utf-8格式的了)转为你选择的编码格式,如果你没有通过save with encoding来选择编码格式,则默认保存为文本加载进来时的编码格式,也就是文件原有的编码格式。这个过程刚刚好和“解码”相对,叫作“编码”。英文中“解码”和“译码”中分别叫decoding和encoding。在其它的程序中,编码可能要你去手动选择,因为它默认的输出编码是程序自身的内部编码,也就是解码后的编码,如python 2.x中,如果你不用"somestring".encoding("你要的编码格式"),则它就输出ascii。所以sublime很智能,就是说如果你不人为的用save with encoding改变编码的目标格式,它就会以解码时对应的格式去编码,这样文件经过sublime处理后,编码格式就不会改变。

  那么sublime的reopen with encoding是用来干什么的呢?前面不是已经解码的概念吗,但你可能要问了,sublime到底是以什么编码格式去理解文本呢?这又是sublime的强大之处了。sublime会先读取文本的前几个字符,然后猜测要解码的文本是用什么编码的,猜到什么,就用什么编码格式去理解文本,然后把它解码。既然是猜,那就可能会猜错,这时候就要靠你自己去指定这个格式了,于是reopen with encoding就派上用场了,你用reopen with encoding,可以告诉sublime用什么编码去理解文本。

  那save with encoding干什么用的呢?前面已经说了,它用来指定“编码”的目标格式,也就是保存后文本的编码格式。这个时候就很重要了,因为文件已经解码成utf-8了,在解码过程中经过了“编码a”—>“utf-8”这样的处理(实际上就是用一定的算法,把二进制数据给处理了一遍),然后你在保存时,又会在编码过程中经过“utf-8”—>“编码b”这样的处理,如果解码过程没有错,也就是正确理解了文件,那么就成功的将文件由“编码a”转为“编码b”了;如果解码的过程有错,也就是错误的理解了文件(比如文件其实是用“编码c”编码的),经过“utf-8”—>“编码b”这样的处理,文件就彻底的乱了。但是如果你没有用save with encoding选择目标编码格式,那个sublime默认采用文本解码前的编码(不一定是真确的,只是sublime理解的文件编码),也就是以“utf-8”—>“编码a”处理文本,而此时你又恰好没有改动过文本,那么“编码”过程就相当于做了一次“解码”过程的逆变换,所以文件就不会发生任何改变。所以千万要慎用save with encoding和reopen with encoding,尤其是reopen with encoding,除非你真的清楚文本的编码格式,否则还是让sublime来猜吧。

  前面讲了那么多,还是没有说到标题,sublime的reopen with encoding和reload with encoding区别到底是什么?很简单,没有区别。reopen with encoding是sublime自带的,不支持GBK等字符,reload with encoding是一个叫做ConvertToUTF8的插件提供的,专门用于支持GBK等字符,和reopen with encoding一样也是用来指定解码格式的。它还提供一个与save with encoding相同功能的操作叫做set file encoding to,用一支持将“编码”目标编码格式指定为GBK等,但是它不立即保存文件到磁盘。要注意的是,因为ConvertToUTF8是一个为了专门支持GBK等编码的插件,所以它的优先级是高于sublime本身的,当你用set file encoding to指定为GBK是,你在用save with encoding想把文件保存成utf-8,它会帮你保存为GBK(因为sublime本身不支持GBK,所以ConvertToUTF8为了支持GBK不得不这么做)。

sublime的reopen with encoding和reload with encoding区别的更多相关文章

  1. 关于Encoding.GetEncoding("utf-8")和Encoding.GetEncoding("GB2312")及Encoding.Default

    关于Encoding.GetEncoding("utf-8")和Encoding.GetEncoding("GB2312")及Encoding.Default ...

  2. Label Encoding vs One Hot Encoding

    最近在刷kaggle的时候碰到了两种处理类别型特征的方法:label encoding和one hot encoding.我从stackexchange, quora等网上搜索了相关的问题,总结如下. ...

  3. 解决self.encoding = charset_by_name(self.charset).encoding

    解决self.encoding = charset_by_name(self.charset).encoding def createMysqlTable(tablename): # config = ...

  4. one-hot encoding与哑变量的区别

    one-hot encoding与哑变量的区别 one-hot比哑变量的特征位多一位,即哑变量是精简版的one-hot,即在线性回归中用截距项来表示最后一维,但由于最初很难分辨特征的主次关系,且机器学 ...

  5. easyuidatagrid中load,reload,loadData的区别

    摘要:datagrid中有load,reload,loadData那三个方式,皆是加载数据的,但又有差别.下面让我们一起来看看: 首先,load方法,比如我已经定义一个datagrid的id为grid ...

  6. easyuidatagrid中load,reload,loadData的区别。

    摘要:datagrid中有load,reload,loadData那三个方式,皆是加载数据的,但又有差别.下面让我们一起来看看: 首先,load方法,比如我已经定义一个datagrid的id为grid ...

  7. <?xml version="1.0" encoding="utf-16"?>. use different encoding

    public string Serialize<T>(T serializeClass) { string xmlString = string.Empty; try { if (seri ...

  8. Python2和Python3关于reload()用法的区别

    Python2 中可以直接使用reload(module)重载模块. Pyhton3中需要使用如下两种方式: 方式(1) >>> from imp >>> imp. ...

  9. Convert.ToBase64String(Byte[])和Encoding.UTF8.GetString(Byte[])的区别

    Encoding.UTF8.GetString是针对使用utf8编码得到的字符串对应的byte[]使用,可以还原我们能看懂的字符串而Convert.ToBase64String是对任意byte[]都可 ...

随机推荐

  1. .net core MVC Filters 过滤器介绍

    一.过滤器的优级依次介绍如下(逐次递减): Authorization Filter ->  Resource Filter -> Acton Filter -> Exception ...

  2. Visual Assist X破解安装及设置

    本文提供的插件版本为Visual Assist X 10.9.2248,支持Visual Studio 2010~2017各版本,本人亲测均可正常使用. 一. 插件下载: 点击下载链接,找到对应软件下 ...

  3. 「BZOJ 3209」花神的数论题

    Title Link 戳我 Title Solution 这道题可以运用组合数的思想啊,数位dp也可以,随便你怎么做,这里就讲一讲组合数的做法吧,要小于n,所以我们可以枚举n二进制下1的位置,在i-1 ...

  4. 小规模kvm宿主机管理-webvirtmgr安装

    1.前言WebVirtMgr是近两年来发展较快,比较活跃,非常清新的一个KVM管理平台,提供对宿主机和虚机的统一管理,它有别于kvm自带的图形管理工具(virtual machine manager) ...

  5. linux命令笔记,零散记录<不完整,学习用>

    uname -a 输出系统架构 cp 源文件 目标文件 mv同理 tar –xvf file.tar // 解压 tar包 tar -zxvf file.tar.gz // 解压tar.gz tar ...

  6. kali 插耳机没声音

    打开终端,然后输入命令:下载pulseaudio音量控制软件: apt install pavucontrol 然后终端输入指令:pavucontrol打开软件,发现在输出设备中有两个输出设备:一个N ...

  7. 导出当前python安装了哪些第三方模块+批量安装python模块

    pip freeze > mokuai.txt  #导出你当前python环境里面有哪写第三方模块 pip install -r mokuai.txt #从文件里面批量安装模块

  8. spring 学习(三):aop 学习

    spring 学习(三):aop 学习 aop 概念 1 aop:面向切面(方面)编程,扩展功能不修改源代码实现 2 AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码 3 aop底层使用动态代 ...

  9. 题解 CF520E 【Pluses everywhere】

    题目链接 ps:可能组合数一不小心打错了,请发现的大佬提出,谢谢. 我们来讨论每一位数$a_{i}$被算了多少次. 总共有$n-1$个空位可以放$'+'$所以,$a_{i}$左边有$i-1$个空位,右 ...

  10. js去重方法

    function remove(array){ var obj={}; newarray=[]; for(var i in array){ console.log(i); var arg=array[ ...