文件另存为GBK编码格式

谈到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本身去处理。

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

在这里插入图片描述

小心一个大坑

GBK Support的作者无意留下了一个坑:UTF8字符集与GBK字符集中存在一些特殊字符相互之间无法识别,导致转换无法进行。
当遇到这种情况时怎么办?GBK Support选择了最糟糕的处理方式:不转换,并且一声不吭!当初我遇到这个问题还傻傻地以为Sublime卡死了~
如下图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')(推荐)。

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

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

相关话题
Sublime深度定制:准备篇-将配置文件同步到云端git仓库
Sublime深度定制:工具篇-插件修改神器PackageResourceViewer
Sublime深度定制:文件另存为GBK编码格式
Sublime深度定制:键入 this. 自动变为指针形式 this->
Sublime深度定制:build system 的妙用
Sublime深度定制:编译和运行 C/C++/Java 项目

作者:Henry606
链接:https://www.jianshu.com/p/591335cd2465
來源:简书

©️2020 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值