Sublime Text 3、Python 3和UTF-8不兼容
我正在用Python脚本解析一个HTML页面,这个页面里有一些非ASCII字符。我总是遇到一个错误,提示[Decode error - output not utf-8]
。于是我查了一下,发现了这段有趣的代码:
import codecs
#print((1, codecs.decode(codecs.encode('ò', 'utf-8'), 'utf-8')))
print('ò')
这段代码会打印出[Decode error - output not utf-8]
。如果我用ASCII字符来编码,就不会出现这个错误。这不是编译错误——程序可以正常运行并完成,所以我怀疑是Sublime Text在处理脚本输出时出了问题,但我没法进一步确定原因。我该怎么做才能解决这个问题呢?
2 个回答
0
我在用Python 3.4和Sublime Text 2的时候也遇到了同样的问题。即使在文件的第一行明确写上编码方式(用# -- coding: UTF-8 --),也没有解决问题。我还尝试过对出问题的字符串进行明确编码,但还是没用。
这看起来像是Sublime内部的问题或者bug,因为我也试着用Notepad++把出问题的部分编码成UTF-8(没有BOM),结果还是一样。
虽然我不知道怎么在Sublime 2/3里解决这个问题,但我可以提供一个变通的方法,就是使用CMD/PowerShell,这对我来说效果很好,输出也正确。
PS:我希望这能帮到你,但请注意我既不是经验丰富的程序员,也对Python或Sublime没有深入的了解。我只是想分享一下我的看法。
7
现在打开命令提示符,输入以下内容:
c:\>chcp
来检查命令的编码。对我来说,它是
Active code page: 852
接下来打开 Python.sublime-build
文件(路径是 C:\Users\User\AppData\Roaming\Sublime Text 2\Packages\User
),然后添加编码:
{
"cmd": ["c:\\python33\\python", "-u", "$file"],
"file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
"selector": "source.python",
"encoding": "cp852"
}
这样应该就可以了。