Sublime Text 3、Python 3和UTF-8不兼容

3 投票
2 回答
8089 浏览
提问于 2025-04-17 23:34

我正在用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"
} 

这样应该就可以了。

撰写回答