美文网首页Sublime Text
Sublime深度定制:文件另存为GBK编码格式

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

作者: Henry606 | 来源:发表于2017-01-16 23:38 被阅读381次

    谈到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了~

    相关话题

    相关文章

      网友评论

      • KomalZheng:GBK这种东西,早该淘汰了
        Henry606:@ZhengHuaxing 是早该淘汰了,然而现实太残酷,很多软件都跟不上节奏,比如 Windows 系统默认是 GBK 编码,Matlab 中文版也是默认 GBK 编码,而且连个设置选项都不给。所以,如果代码包含中文注释在 Matlab 中打开会变成乱码,除非事先保存成 GBK 格式。
        总结:GBK 虽然该淘汰,但目前仍摆脱不了。

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

      本文链接:https://www.haomeiwen.com/subject/qcupbttx.html