首先必需要明白一点,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不得不这么做)。

最新文章

  1. 透过HT for Web 3D看动画Easing函数本质
  2. win7系统下的FTP配置
  3. 如何快速清空项目中的session值
  4. MyBatis 注解使用动态SQL
  5. python购物&常用字符处理方法
  6. JavaScript要点 (五) 函数定义
  7. 【夯实基础】Spring在ssh中的作用
  8. Head First设计模式之抽象工厂模式
  9. poj 3696 The Luckiest Number
  10. hibernate查询出的实体,set值后,自动更新到数据
  11. ISP基本框架及算法介绍
  12. 使用表类型(Table Type-SqlServer)实现百万级别的数据一次性毫秒级别插入
  13. Android view层
  14. Docker系列教程05 容器常用命令
  15. Ubuntu中编译helloworld驱动
  16. 数据持久化—真机上的Plist写入
  17. win10+Theano+GPU
  18. [SQLServer大对象]——FileTable初体验 (转载)
  19. Java 的CardPanel用法
  20. [ES6] 04. The let keyword -- 2 Fiald case

热门文章

  1. Spring中的用到的设计模式
  2. MVPArms MVP快速集成框架
  3. .NET平台的资源文件管理
  4. iOS 开发技术体系
  5. WCF进阶(二)——Contract
  6. Jmeter_Beanshell_使用Java处理JSON块
  7. ListBox Dock Fill 总是有空隙的问题
  8. Java面向对象之内部类(匿名内部类)
  9. postgresql中的各种scan的比较
  10. Python数组(二)