Sublime text 2/3 [Decode error - output not utf-8] 完美解决方法

来源:互联网 发布:犀牛设计软件视频教程 编辑:程序博客网 时间:2024/04/28 10:56
sublime text有时运行会输出以下错误信息:

[Decode error - output not utf-8]或者[Decode error - output not gbk]

错误信息意思就是脚本输出的信息不是某种指定编码.

指定的编码一般在XX.sublime-build里,比如ruby.sublime-build的内容为: 

[python] view plaincopy在CODE上查看代码片派生到我的代码片
  1. {  
  2.     "shell_cmd""ruby \"$file\"",  
  3.     "file_regex""(\\w:...*?):([0-9]*):?([0-9]*)",  
  4.     "selector""source.ruby",  
  5.     "encoding""utf-8",   
  6. }  

其中encoding就是指定的编码,ruby.sublime-build可以在Sublime Text 3\Packages\Ruby.sublime-package里找到.

我们可以通过修改ruby.sublime-build来修改输出文字信息的编码.

1. 将ruby.sublime-build文件从Ruby.sublime-package里复制出来,(注意:Ruby.sublime-package是一个zip压缩文件,只要将其后缀名改为zip即可打开这个压缩文件)

2.将ruby.sublime-build复制到sublime text的Data\Packages\User\目录

3. 打开此文件,将此文件中的"encoding": "utf-8"修改为"encoding": "gbk"

以上这种修改有局限,比如我有时候输出的是utf-8,有时候输出的是gbk,这时候就不行了.

 

以下方法可以解决这个局限.

1.在sublime text的安装目录下的Packages\目录下找到Default.sublime-package,将这个复制出来,将后缀改名为zip.

是的,它就是个zip文件,解压缩它,然后将其中的exec.py文件放到sublime text的Data\Packages\User\目录下.

2.打开exec.py.找到类ExecCommand的append_data函数,在以下位置添加代码

[python] view plaincopy在CODE上查看代码片派生到我的代码片
  1. def append_data(self, proc, data):  
  2.      if proc != self.proc:  
  3.          # a second call to exec has been made before the first one  
  4.          # finished, ignore it instead of intermingling the output.  
  5.          if proc:  
  6.              proc.kill()  
  7.          return  
  8.   
  9.      #add start  
  10.      is_decode_ok = True;  
  11.      try:  
  12.          str = data.decode(self.encoding)  
  13.      except:  
  14.          is_decode_ok = False  
  15.      if is_decode_ok==False:  
  16.          try:  
  17.              str = data.decode("gbk")  
  18.          except:  
  19.              str = "[Decode error - output not " + self.encoding + " and gbk]\n"  
  20.              proc = None  
  21.   
  22.      # Normalize newlines, Sublime Text always uses a single \n separator  
  23.      # in memory.  
  24.      str = str.replace('\r\n''\n').replace('\r''\n')  
  25.   
  26.      self.output_view.run_command('append', {'characters': str, 'force'True'scroll_to_end'True})  


其原理就是在解码输出文字编码出错时再使用gbk试试,相当于utf-8和gbk两种编码都试试,这样可以解决编码错误的问题.

您可以任意转载本文,但转载时请勿删除作者信息。 
作者:hgyxbll,原文链接:http://shashanzhao.com/archives/976.html
0 0
原创粉丝点击