首先必需要明白一点,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. 【转】开源视频录制库LandscapeVideoCamera

    非常强大的android 视频录制库,可以选择视频尺寸以及视频质量,只允许横屏录制. 使用Android自带的Camera应用可以录制视频,只需发送MediaStore.ACTION_VIDEO_CA ...

  2. SQL数据库查询语言(1)

    目录 MySQL数据库 MySQL安装与配置 DDL数据定义语言 创建数据库 查看.删除数据库 修改.备份.恢复数据库 创建表 修改表 MySQL常用数据类型 DML数据操纵语言 Insert语句 m ...

  3. 【bzoj4103】[Thu Summer Camp 2015]异或运算 可持久化trie树

    Description 给定长度为n的数列X={x1,x2,...,xn}和长度为m的数列Y={y1,y2,...,ym},令矩阵A中第i行第j列的值Aij=xi xor yj,每次询问给定矩形区域i ...

  4. 洛谷 P2096 最佳旅游线路

    某旅游区的街道成网格状.其中东西向的街道都是旅游街,南北向的街道都是林阴道.由于游客众多,旅游街被规定为单行道,游客在旅游街上只能从西向东走,在林阴道上则既可从南向北走,也可以从北向南走. 阿龙想到这 ...

  5. 【BZOJ4800】[CEOI2015 Day2]世界冰球锦标赛 (折半搜索)

    [CEOI2015 Day2]世界冰球锦标赛 题目描述 译自 CEOI2015 Day2 T1「Ice Hockey World Championship」 今年的世界冰球锦标赛在捷克举行.\(Bob ...

  6. Hive内置函数和自定义函数的使用

    一.内置函数的使用 查看当前hive版本支持的所有内置函数 show function; 查看某个函数的使用方法及作用,比如查看upper函数 desc function upper; 查看upper ...

  7. win10进入安全模式的方法

    https://jingyan.baidu.com/article/a3aad71ac5919bb1fa009667.html

  8. SQl 根据某列去重 partition by

    主键为ID select * from [infotops] where Id in (select max(id) from [infotops] group by InfoId) -------- ...

  9. SLAM入门必收藏的资料

    搜集了各大网络,请教了SLAM大神,终于把SLAM的入门资料搜集全了!在分享资料前,我们先来看看,SLAM技术入门前需要具备哪些知识?首先学习SLAM需要会C和C++,网上很多代码还用了11标准的C+ ...

  10. 【算法笔记】B1006 换个格式输出整数

    1006 换个格式输出整数 (15 分) 让我们用字母 B 来表示“百”.字母 S 表示“十”,用 12...n 来表示不为零的个位数字 n(<10),换个格式来输出任一个不超过 3 位的正整数 ...