首先必需要明白一点,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. TSQL--SET ANSI_NULLS OFF

    当ANSI_NULLS 为ON时,遵循SQL92的标准,只能使用IS NULL 来判断值是否为NULL, 而不能使用=或<>来与NULL做比较,任何值包括NULL值与NULL值做=或< ...

  2. NSURLSession 网络请求

    1.NSURLSession 在 iOS9.0 之后,以前使用的 NSURLConnection 过期,苹果推荐使用 NSURLSession 来替换 NSURLConnection 完成网路请求相关 ...

  3. sql中日期转换

    date_format的函数使用令日期格式转换变得十分便捷首先先说一个自己粗心踩到的坑.因为最开始自己建的表里面存的数据,已经固定是周一的时间了,然后有一个状态判断是需要拿到所有周一是否有数据,当时忘 ...

  4. 也谈ObjectARX多版本批量编译

    也谈ObjectARX多版本批量编译 by edata 2017-12-10 因某些原因,我的电脑系统依旧是windows XP,所以能安装的vs最高版本是vs2010,以下均在vs2010上实现,其 ...

  5. LVS解决高并发,大数据量

    http://www.360doc.com/content/14/0726/00/11962419_397102114.shtml LVS的全称Linux vitual system,是由目前阿里巴巴 ...

  6. 有关unixODBC:Data source name not found, and no default driver specified的问题

    还是昨天测试postgresql的有关Mirroring Controller的功能时出的问题(真TM是个坑). 首先说下环境: 操作系统平台:RHEL6 x86_64 unixODBC版本:2.3. ...

  7. 获取当前按钮或者html的ID名称

    今天做的上传图片,点击图片删除. 随机给图片id,获取图片id,然后删除图片. 由于图片id是随机的,用点击img或者点击class,获取id都不行,最后用onclick事件获取. js代码如下: $ ...

  8. ansible基本模块-yum

    ansible   XXX   -m   yum   -a  "name=XXX"

  9. Qt 学习之路 2(37):文本文件读写

    Qt 学习之路 2(37):文本文件读写 豆子 2013年1月7日 Qt 学习之路 2 23条评论 上一章我们介绍了有关二进制文件的读写.二进制文件比较小巧,却不是人可读的格式.而文本文件是一种人可读 ...

  10. Visual Studio 2019 秘钥

    Visual Studio 2019 EnterpriseBF8Y8-GN2QH-T84XB-QVY3B-RC4DF Visual Studio 2019 ProfessionalNYWVH-HT4X ...