sublime text编码解码过程

文件的编码事先是不知道的,sublime text打开文件时,会自动尝试用各种编码方式理解文件(在默认情况下,包括ASCII类, UTF-8 and UTF-16),然后根据对应的规则解码。

  • 有必要说明一下,「ANSII 编码」只是一种泛称,并不存在哪种具体的编码方式叫做ANSI,它只是一个Windows操作系统上的别称而已。凡是满足一定规则的编码都可以叫「ANSII 编码」。在中文简体Windows操作系统上,ANSII就是GBK;在泰语操作系统上,ANSI就是TIS-620(一种泰语编码);在韩语操作系统上,ANSII就是EUC-KR(一种韩语编码)
    大家在用中文版windows记事本保存文件的时候,可以选择ASCII格式,其实选择的就是GBK,如果你使用的是韩语的的windows,你选择的其实就是EUC-KR,只不过Windows可能是为了方便,把各种基于ASCII的编码方式都抽象为ASCII。

  • 如果sublime觉得文件的编码格式是ASCII类和UTF-8,那么它就会按照utf-8进行解码和显示,并且默认采用这个格式保存

  • 如果如果sublime觉得文件的编码格式是UTF-16 BE,就按照UTF-16 BE打开;如果觉得是UTF-16 LE,就按照UTF-16 LE打开,并且默认采用这个格式保存

  • 如果采用以上编码方式都无法确定如何解码,就采用备用编码格式 Western (Windows 1252) 解码,就是说它无法决定编码格式

  • 事实上,sublime的决定并不一定是正确的,所以乱码还是可能出现的。

下面是sublime的设置文件中的默认配置345行和352行,可以很清楚的看到其描述:

—The encoding to use when the encoding can’t be determined automatically.
—ASCII, UTF-8 and UTF-16 encodings will be automatically detected.
—如果sublime无法自动决定决定编码方式,就采用下述编码,默认是Western(Windows 1252)
—ASCII, UTF-8 and UTF-16编码格式可以被自动检测到
"fallback_encoding": "Western (Windows 1252)",

— Encoding used when saving new files, and files opened with an undefined encoding (e.g., plain ascii files).
— If a file is opened with a specific encoding (either detected or given explicitly), this setting will be ignored, and the file will be saved with the
encoding it was opened with.
—下述编码格式用来保存新文件,或者打开未具体定义编码格式的文件(如ASCII类文件)。
—如果文件打开时 自动检测到 或者 用户指定了编码方式,下述定义会被忽略,而会使用 指定的 或者 检测到 的编码方式打开和保存文件。

—注意,我们刚才说了,ASCII并不是一种具体的编码格式,它是一个泛称,包括GBK等。所以GBK文件会按照UTF-8规则进行解码,这也是中文乱码的原因。
"default_encoding": "UTF-8",

对几个容易混淆的操作进行说明

其中(reopen with encoding)(set encoding)
(save with encoding)是sublime text自带的。

安装了ConvertToUTF-8之后就会多出来两个,增加了对GBK的支持,中文不会再乱码:
(set file encoding to)(reload with encoding)

操作 说明
reopen with encoding 不用sublime猜了或者它猜错了,我自己指定解码方式,
reload with encoding 和上面一个意思,只不过增加了对GBK的支持,中文不乱码
save with encoding 指定保存的编码格式。比如我新建一个文件,不想使用默认的utf-8,我可以选择其他格式。或者我打开了一个文件,想把保存为其他格式。
set encoding 和上面一个相似。用于指定将要保存的格式。它在下面的状态栏中,一般不显示,需要在设置中加上"show_encoding": true,状态栏中会显示当前文件的解码规则,点击它就会出现这个选项。与上面不同的是,选择编码方式后,不会立即保存,但是保存的格式已经指定好了。之后用户直接ctrl+s就行了,如果用户选择不保存,文件的编码格式就不会变。
set file encoding to 和set encoding一样,只不过增加了对GBK的支持,并且优先级高于set encoding

注意
打开文件时,如果出现乱码,就切换编码方式,找到正确的编码方式打开。

如果出现乱码,就说明已经出现错误,如果不小心进行了保存操作,保存成了不同的编码格式,文件就更乱了,一般可以通过切换编码方式恢复文件。但是也有可能出现错误和损坏,乃至无法恢复

一般我们都是把文件保存成utf-8格式的。这样比较通用,不容易乱码,毕竟大多数软件都采用这个格式。但是在windows上的默认编码是GBK, 我们难免会遇到一些中文乱码问题,在上面浪费时间,所以搞清楚文件编码是很有必要的。

关于各种文件编码方式可以参考:
https://zhuanlan.zhihu.com/p/46216008

关于UTF-16 BE、UTF-16 LE、BOM等可以参考:
https://www.iteye.com/topic/583064

sublimetext的文件编码理解reopen/reload with encoding,set encoding,save with encoding, set file encoding to相关推荐

  1. python设置文件编码_python修改文件编码为utf-8格式

    原博文 2019-12-02 17:11 − 简单实现.h,.c文件修改编码为utf-8格式. import os; import chardet; file_path = "." ...

  2. linux 文件编码问题

    iconv -f UTF-8 -t gb18030 file_input -o file_output 上述命令不一定有用. 大概了解下文件编码,和vim里面的编码情况. 1 字符编码基础知识 字符编 ...

  3. java文件编码格式环境变量_Jenkins maven 构建乱码,修改file.encoding系统变量编码为UTF-8...

    一切都是windows的控制台默认编码GBK问题 情景: 使用jenkins构建,console 输出的中文乱码.代码编码格式是utf-8,因为Jenkins会默认读取当前系统的编码格式,导致构建日志 ...

  4. python 写入文件编码_使用Python写入文本文件时的编码问题

    我正在编写一个程序,用一个简短的python脚本"手动"安排一个csv文件,使其成为正确的json语法.从输入文件中,我使用readlines()将文件格式化为一个行列表,然后将其 ...

  5. linux文件编码无法修改,在Linux系统中修改文本的字符编码的方法

    正如我们所知道的那样,电脑只能够处理低级的二进制值,并不能直接处理字符.当一个文本文件被存储时,文件中的每一个字符都被映射成二进制值,实际存储在硬盘中的正是这些"二进制值".之后当 ...

  6. python3默认的字符编码和文件编码_Python的字符编码之三个问题

    看过很多关于Python字符编码的博客,或深或浅,总感觉有点云里雾里,今天这里我尝试用我的方式也来凑个热闹. 首先,我们要弄清楚几个问题,这个对我们后面的理解非常重要. 字节与字符 Python源代码 ...

  7. oracle gbk ebcdic,文件编码 ANSI、GBK、GB2312、MS936、MS932、SJIS、Windows-31 、EUC-JP 、EBCDIC 等等之间的区别与联系...

    ■前言 暂且不谈 UTF-8,Unicode (UTF-8只是Unicode的一种实现方式) https://blog.csdn.net/sxzlc/article/details/106084402 ...

  8. linux 编码文件,linux文件编码

    linux下新建一个文件,或采用fopen新建,那么文件的编码是什么? 怎么查看文件编码格式: 查看文件编码file命令 file ip.txt ip.txt: UTF-8 Unicode text, ...

  9. linux 字符集转换命令,Linux下GBK编码到UTF-8文件编码转换方法

    Linux命令行下查看看文件的编码 enca 文件名 Linux文件名编码批量转换 convmv -f 源编码 -t 新编码 [选项] 文件名 常用参数: -r 递归处理子文件夹 --notest 真 ...

  10. 用Python chardet库来判断文件编码

    2019独角兽企业重金招聘Python工程师标准>>> 由于工作需要处理大量文件,在此之前需要统一文件编码.于是研究了一阵如何识别文件编码,转码这一过程相对简单,而识别确实个难题.由 ...

最新文章

  1. 读书笔记:《搞定3--平衡工作和生活的艺术》
  2. python多轴图_python-Aplpy多图动态轴共享
  3. .NET Core TDD 前传: 编写易于测试的代码 -- 构建对象
  4. web开发软件,HTML如何添加锚点,成功入职阿里
  5. WordPress调用自带jquery的方法 ,使 $ 生效
  6. IT职业就业-学长有话说(二)
  7. PbootCMS是全新内核且永久开源免费的PHP企业网站开发建设管理系统
  8. moocpython123输入若干数、每行输入一个数值作业_MOOC嵩天@python123作业
  9. House Robber
  10. 编译OpenJDK8:error: control reaches end of non-void function [-Werror=return-type]
  11. togaf简介(一)
  12. 计算机系统的结构分类,图解计算机结构与系统分类!!
  13. opencv实际案例(一)银行卡号的识别
  14. 腾讯云数据库团队:MySQL AHI 实现解析
  15. Git远程库代码回退
  16. 观点 | 以太坊:货币的互联网
  17. 软件工程复习知识点汇总(2)
  18. CSS 单词换行 word-break属性
  19. react 监听键盘事件及多按键事件
  20. Verilog中的Signed Decimal与Signed Magnitude区别

热门文章

  1. 纯干货:手把手地教你搭建Oracle Sharding数据库分片技术
  2. [矩阵论]欧氏空间的线性变换是正交变换的充要条件是,它对于标准正交基的矩阵是正交矩阵
  3. [计算机网络]十、TCP的拥塞控制和4个计时器、常用协议原理和命令
  4. react Hook useContext()
  5. win10桌面图标全部变成白色的怎么办
  6. Niagara内容示例 1.3 Simple GPU Emitter
  7. 宝宝纸尿裤怎么选?我联合2000位宝妈,对20款纸尿裤做了次测评
  8. matlab 判断矩阵是否正定
  9. Python 爬虫---初窥门径
  10. [转载]分布式双活数据中心