首 页 » 软件使用 » 解决sublime text输出decode error问题

解决sublime text输出decode error问题

[ 2014-04-09 20:54 | 浏览次数: 8,590次 | 3条评论 ]

sublime text有时运行会输出以下错误信息:

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

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

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

1
2
3
4
5
6
{
	"shell_cmd": "ruby \"$file\"",
	"file_regex": "(\\w:...*?):([0-9]*):?([0-9]*)",
	"selector": "source.ruby",
	"encoding": "utf-8", 
}

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

(使用广泛的Python.sublime-build在Python.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\目录(可以先通过sublime的菜单:Preferences->浏览程序包  打开Data\Packages目录)

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函数,在以下位置添加代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    def append_data(self, proc, data):
        if proc != self.proc:
            # a second call to exec has been made before the first one
            # finished, ignore it instead of intermingling the output.
            if proc:
                proc.kill()
            return
 
        #add start
        is_decode_ok = True;
        try:
            str = data.decode(self.encoding)
        except:
            is_decode_ok = False
        if is_decode_ok==False:
            try:
                str = data.decode("gbk")
            except:
                str = "[Decode error - output not " + self.encoding + " and gbk]\n"
                proc = None
	#add end
 
        # Normalize newlines, Sublime Text always uses a single \n separator
        # in memory.
        str = str.replace('\r\n', '\n').replace('\r', '\n')
 
        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
上一篇: | 下一篇:

共有3条评论 [点此发言]

  1. peter
    2014-09-20 14:10

    你好楼主,我按照你的第二种方法解决了一部分问题,但是还不完善,我发现sublime3输出中文是有行数限制的,前400多行可以正常显示,之后的又会出现[Decode error - output not utf-8]提示,然后从3000多行开始又能正常显示,然后5000多到8000行又出现[Decode error - output not utf-8]提示,我写了小代码来验证这一点,循环一万次输出“你好”。不知道你是否也遭遇同样的问题?

    • hgyxbll
      2014-09-23 21:50

      我也遇到了,原因是Sublime每隔一定时间会去取程序的输出,有可能此时取到的正好是中文的一半,这样就识别错误了.

取消回复