談到GBK編碼問題不得不對Sublime強(qiáng)勢吐槽一把:連windows自帶的幾乎只能打字的“記事本”都支持GBK編碼,而如此鼎鼎大名的文本編輯器Sublime卻不支持,同樣倒霉的還有日語、韓語,也都不被支持惰蜜。雖然用戶這么多年一直強(qiáng)烈要求财著,卻還是沒加上,令人失望。
失望歸失望,但這屁大點(diǎn)小事當(dāng)然難不倒廣大勞動人民憋槐,大家創(chuàng)造出一大批的插件來解決這個問題嘶摊,最廣為人知的就是ConvertToUTF8
了(目測經(jīng)常用Sublime的小伙伴們90%都裝了這個插件)沥匈。
如何將文件另存為GBK格式?這個問題看似簡單锈玉,卻難倒了ConvertToUTF8
齐蔽。ConvertToUTF8
的名字“convert to utf8”已經(jīng)表明它的作用是將其他編碼的文件(如GBK)轉(zhuǎn)化為UTF8編碼,以便在Sublime上正常顯示不亂碼占卧,但是要另存為GBK還真不行舷蒲!
雖然有點(diǎn)反人類域滥,但還真有不少國產(chǎn)項目用的是GBK編碼。假如別人給你了一批GBK文件着倾,你只是用Sublime打開看了一眼崇决,然后發(fā)現(xiàn)編碼變成了UTF8,還死活改不回去(ConvertToUTF8
確實會造成這樣的后果)谨究,那就尷尬了。
要解決這個問題胶哲,需要用到另一款插件GBK Support
畔塔。不像ConvertToUTF8
那么大而全(支持中日韓文的所有標(biāo)準(zhǔn)編碼),GBK Support
非常簡潔鸯屿,只支持GBK與UTF8之間相互轉(zhuǎn)換澈吨,源碼只有一個Python腳本,幾乎可以當(dāng)做學(xué)習(xí)Python編碼處理的教材寄摆!
使用GBK Support插件
當(dāng)打開一個文件時谅辣,如果該文件是GBK編碼,那么GBK Support
會在該文件的同目錄下生成一個.dump
文件婶恼,Sublime中打開的也是這個.dump
文件桑阶,其作用是作為一個緩沖文件。也就是說.dump
本身是一個UTF8文件勾邦,Sublime可以正常讀寫蚣录,當(dāng)你按Ctrl+S
保存時.dump
中的內(nèi)容將轉(zhuǎn)化為GBK編碼并保存到源文件中。但是你完全不用擔(dān)心過多的.dump
文件成為磁盤垃圾检痰,當(dāng)你在Sublime中關(guān)閉文件時包归,目錄下的.dump
文件會立刻消失。不得不說這個辦法相當(dāng)巧妙铅歼!
下面是圖片示例:
如果你打開的文件不是GBK編碼,那么插件將不會運(yùn)行换可,而是交給Sublime本身去處理椎椰。
如何實現(xiàn)另存為功能呢?只需Ctrl+Shift+P
沾鳄,然后輸入gbk
慨飘,選擇如下圖兩個選項中的一個即可:
小心一個大坑
GBK Support
的作者無意留下了一個坑:UTF8字符集與GBK字符集中存在一些特殊字符相互之間無法識別,導(dǎo)致轉(zhuǎn)換無法進(jìn)行译荞。
當(dāng)遇到這種情況時怎么辦瓤的?GBK Support
選擇了最糟糕的處理方式:不轉(zhuǎn)換,并且一聲不吭吞歼!當(dāng)初我遇到這個問題還傻傻地以為Sublime卡死了~
如下圖UTF8文件中存在一個特殊字符
這時用GBK Support
令存為GBK編碼將沒有任何反應(yīng)圈膏!怎么辦呢?
打開源碼一看究竟吧
使用PackageResourceViewer打開GBK Support的源碼sublime_gbk.py
篙骡,可以快速定位到39行saveWithEncoding
這個函數(shù)
(關(guān)于PackageResourceViewer參見這篇文章Sublime深度定制:工具篇-插件修改神器PackageResourceViewer)
第43行encode
函數(shù)是關(guān)鍵句稽坤,encode
函數(shù)是Python內(nèi)置的編碼函數(shù)丈甸,針對編碼失敗的問題,一般有2種解決方法:
- 在此處加上異常處理語句(麻煩)尿褪;
- 將
encode(encoding)
改為encode(encoding,'ignore')
(推薦)睦擂。
采用第2種方法后,無法識別的特殊字符將會被忽略杖玲,在轉(zhuǎn)換后的文件中消失或亂碼顿仇。但一般很長的中文文件中才有少數(shù)無法識別的特殊字符,忽略掉完全不會影響閱讀摆马,這比放在那里不予轉(zhuǎn)換要好得多臼闻。
現(xiàn)在可以隨心所欲地另存為GBK了~