sublime的reopen with encoding和reload with encoding区别
首先必需要明白一点,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区别的更多相关文章
- 关于Encoding.GetEncoding("utf-8")和Encoding.GetEncoding("GB2312")及Encoding.Default
关于Encoding.GetEncoding("utf-8")和Encoding.GetEncoding("GB2312")及Encoding.Default ...
- Label Encoding vs One Hot Encoding
最近在刷kaggle的时候碰到了两种处理类别型特征的方法:label encoding和one hot encoding.我从stackexchange, quora等网上搜索了相关的问题,总结如下. ...
- 解决self.encoding = charset_by_name(self.charset).encoding
解决self.encoding = charset_by_name(self.charset).encoding def createMysqlTable(tablename): # config = ...
- one-hot encoding与哑变量的区别
one-hot encoding与哑变量的区别 one-hot比哑变量的特征位多一位,即哑变量是精简版的one-hot,即在线性回归中用截距项来表示最后一维,但由于最初很难分辨特征的主次关系,且机器学 ...
- easyuidatagrid中load,reload,loadData的区别
摘要:datagrid中有load,reload,loadData那三个方式,皆是加载数据的,但又有差别.下面让我们一起来看看: 首先,load方法,比如我已经定义一个datagrid的id为grid ...
- easyuidatagrid中load,reload,loadData的区别。
摘要:datagrid中有load,reload,loadData那三个方式,皆是加载数据的,但又有差别.下面让我们一起来看看: 首先,load方法,比如我已经定义一个datagrid的id为grid ...
- <?xml version="1.0" encoding="utf-16"?>. use different encoding
public string Serialize<T>(T serializeClass) { string xmlString = string.Empty; try { if (seri ...
- Python2和Python3关于reload()用法的区别
Python2 中可以直接使用reload(module)重载模块. Pyhton3中需要使用如下两种方式: 方式(1) >>> from imp >>> imp. ...
- Convert.ToBase64String(Byte[])和Encoding.UTF8.GetString(Byte[])的区别
Encoding.UTF8.GetString是针对使用utf8编码得到的字符串对应的byte[]使用,可以还原我们能看懂的字符串而Convert.ToBase64String是对任意byte[]都可 ...
随机推荐
- Job-Show Liang,你来掌管诺基亚王国,可好?
保留我一向高大上风格,开头当然来一个段子 在即将到来MWC(Mobile World Congress缩写,世界移动通信大会),很高兴能听到小诺来参展,我不得不给它32个赞,因为小诺已经好几届没有浮头 ...
- SurfaceView和SurfaceHolder的基本用法
仅做记录使用,新手也可以来看看,怎么得到一个surfaceholder. 1.在xml文件中增加一个surfaceView控件. <SurfaceView android:layout_widt ...
- vs2017 C++动态链接库的创建和调用(隐式)
一.VS创建动态链接库 1.打开vs新建项目 创建动态链接库 2.添加头文件.h,在h文件中添加如下内容: #pragma once//该头文件只编译一次#include<iostream> ...
- markdown syntax
Markdown 语法 转载自https://zh.mweb.im/markdown.html 首先应该了解的 每一个 Markdwon 使用者都应该了解的,是 Markdown 最基本的版本,也就是 ...
- MS SQL Server计算间隔时间
开始需要,写了一个计算时间间隔的函数,可以参考: 得到的结果: 再列举一个例子:
- ubuntu14.04,安装Git(源代码管理工具)
在shell中执行:sudo apt-get install git-core
- Ubuntu 14.10,准备C/C++的编译环境
Ubuntu缺省情况下,并没有提供C/C++的编译环境,因此还需要手动安装. 如果单独安装gcc以及g++比较麻烦,幸运的是,为了能够编译Ubuntu的内核,Ubuntu提供了一个build-esse ...
- JSP页面导出PDF格式文件
JSP页面导出PDF格式文件基本在前端页面可以全部完成 <script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/ ...
- 【转】如何不让DataGridView自动生成列
源地址:https://www.cnblogs.com/hailexuexi/p/3983856.html
- Django权限控制进阶
一.一级菜单的排序 我们用字典存放菜单信息,而字典是无序的,当一级菜单过多时可能会出现乱序情况,因此需要给一级菜单排序 1.给一级菜单表的model中加一个weight权重的字段 ,权重越大越靠前 w ...