Sublime Text

Sublime深度定制:文件另存为GBK编码格式

2017-01-16  本文已影响381人  Henry606

谈到GBK编码问题不得不对Sublime强势吐槽一把:连windows自带的几乎只能打字的“记事本”都支持GBK编码,而如此鼎鼎大名的文本编辑器Sublime却不支持,同样倒霉的还有日语、韩语,也都不被支持。虽然用户这么多年一直强烈要求,却还是没加上,令人失望。

失望归失望,但这屁大点小事当然难不倒广大劳动人民,大家创造出一大批的插件来解决这个问题,最广为人知的就是ConvertToUTF8了(目测经常用Sublime的小伙伴们90%都装了这个插件)。

如何将文件另存为GBK格式?这个问题看似简单,却难倒了ConvertToUTF8ConvertToUTF8的名字“convert to utf8”已经表明它的作用是将其他编码的文件(如GBK)转化为UTF8编码,以便在Sublime上正常显示不乱码,但是要另存为GBK还真不行!

虽然有点反人类,但还真有不少国产项目用的是GBK编码。假如别人给你了一批GBK文件,你只是用Sublime打开看了一眼,然后发现编码变成了UTF8,还死活改不回去(ConvertToUTF8确实会造成这样的后果),那就尴尬了。

要解决这个问题,需要用到另一款插件GBK Support。不像ConvertToUTF8那么大而全(支持中日韩文的所有标准编码),GBK Support非常简洁,只支持GBK与UTF8之间相互转换,源码只有一个Python脚本,几乎可以当做学习Python编码处理的教材!

使用GBK Support插件

当打开一个文件时,如果该文件是GBK编码,那么GBK Support会在该文件的同目录下生成一个.dump文件,Sublime中打开的也是这个.dump文件,其作用是作为一个缓冲文件。也就是说.dump本身是一个UTF8文件,Sublime可以正常读写,当你按Ctrl+S保存时.dump中的内容将转化为GBK编码并保存到源文件中。但是你完全不用担心过多的.dump文件成为磁盘垃圾,当你在Sublime中关闭文件时,目录下的.dump文件会立刻消失。不得不说这个办法相当巧妙!

下面是图片示例:

在桌面新建一个GBK文件 在Sublime中打开出现.dump后缀 桌面上多出一个.dump文件 关闭Sublime中的.dump文件后桌面.dump也消失

如果你打开的文件不是GBK编码,那么插件将不会运行,而是交给Sublime本身去处理。

如何实现另存为功能呢?只需Ctrl+Shift+P,然后输入gbk,选择如下图两个选项中的一个即可:

GBK Support命令

小心一个大坑

GBK Support的作者无意留下了一个坑:UTF8字符集与GBK字符集中存在一些特殊字符相互之间无法识别,导致转换无法进行。

当遇到这种情况时怎么办?GBK Support选择了最糟糕的处理方式:不转换,并且一声不吭!当初我遇到这个问题还傻傻地以为Sublime卡死了~

如下图UTF8文件中存在一个特殊字符

UTF8文件中存在特殊字符

这时用GBK Support令存为GBK编码将没有任何反应!怎么办呢?

打开源码一看究竟吧

使用PackageResourceViewer打开GBK Support的源码sublime_gbk.py,可以快速定位到39行saveWithEncoding这个函数
关于PackageResourceViewer参见这篇文章Sublime深度定制:工具篇-插件修改神器PackageResourceViewer

定位到编码函数

第43行encode函数是关键句,encode函数是Python内置的编码函数,针对编码失败的问题,一般有2种解决方法:

  1. 在此处加上异常处理语句(麻烦);
  2. encode(encoding)改为encode(encoding,'ignore')(推荐)。
定位到encode函数

采用第2种方法后,无法识别的特殊字符将会被忽略,在转换后的文件中消失或乱码。但一般很长的中文文件中才有少数无法识别的特殊字符,忽略掉完全不会影响阅读,这比放在那里不予转换要好得多。

修改后的源码

现在可以随心所欲地另存为GBK了~

相关话题

上一篇下一篇

猜你喜欢

热点阅读