谈到GBK编码问题不得不对Sublime强势吐槽一把:连windows自带的几乎只能打字的“记事本”都支持GBK编码,而如此鼎鼎大名的文本编辑器Sublime却不支持,同样倒霉的还有日语、韩语,也都不被支持。虽然用户这么多年一直强烈要求,却还是没加上,令人失望。
失望归失望,但这屁大点小事当然难不倒广大劳动人民,大家创造出一大批的插件来解决这个问题,最广为人知的就是ConvertToUTF8
了(目测经常用Sublime的小伙伴们90%都装了这个插件)。
如何将文件另存为GBK格式?这个问题看似简单,却难倒了ConvertToUTF8
。ConvertToUTF8
的名字“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
的作者无意留下了一个坑: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种解决方法:
- 在此处加上异常处理语句(麻烦);
- 将
encode(encoding)
改为encode(encoding,'ignore')
(推荐)。
采用第2种方法后,无法识别的特殊字符将会被忽略,在转换后的文件中消失或乱码。但一般很长的中文文件中才有少数无法识别的特殊字符,忽略掉完全不会影响阅读,这比放在那里不予转换要好得多。
修改后的源码现在可以随心所欲地另存为GBK了~
网友评论
总结:GBK 虽然该淘汰,但目前仍摆脱不了。