我有以下Python3代码尝试读取和打印utf-8编码的文件:

f = open('mybook.txt', encoding='utf-8')
for line in f:
    print(line)

当我使用Sublime Text 3进行构建时,出现以下错误:
UnicodeEncodeError: 'ascii' codec can't encode character '\u2019' in position 18: ordinal not in range(128)

但是,当我仅使用python3在终端中执行代码时,该文件即可工作。

我的构建配置是
{
"cmd": ["/usr/local/bin/python3", "$file"]
, "selector": "source.python"
, "file_regex": "file \"(...*?)\", line ([0-9]+)"
}

如果我将其更改为:
f = open('mybook.txt', encoding='utf-8')
for line in f:
    print(line.encode('utf-8'))

然后,它会打印utf-8编码的字节字符串(我认为这是发生了什么)。
b'Hello\n'
b'\xc2\xab\xe2\x80\xa2\n'
b'Goodbye'

但是我也不知道如何从此开始在屏幕上打印unicode字符...

另外,如果我尝试按照A python program fails to execute in sublime text 3, but success in bash更改此env变量,它仍然无法解决。

最佳答案

答案实际上是在您的问题中链接的问题中-PYTHONIOENCODING需要设置为"utf-8"。但是,由于OS X很愚蠢,并且无法使用Terminal中设置的环境变量或.bashrc或类似文件设置的环境变量,因此无法以其他问题的答案中所示的方式工作。相反,您需要将该环境变量传递给Sublime。

幸运的是,ST3构建系统(我不了解ST2)具有 "env" 选项。这是传递给exec.py的键和值的字典,负责在没有设置"target"选项的情况下运行构建系统。正如我们在上面的评论中所讨论的那样,我表示您的示例程序在Linux上以ST3(内部版本3122)运行时,在包含非ASCII字符的UTF-8编码文本文件上可以正常工作,但在OS X上运行的版本与此不同要使其运行,所需要做的就是更改构建系统以包含以下行:

"env": {"PYTHONIOENCODING": "utf8"},

我保存了构建系统,按⌘B,程序运行正常。

顺便说一句,如果您想阅读exec.pyPackages/Python/Python.sublime-build.sublime-package归档文件中打包的任何其他文件,请通过Package Control安装 PackageResourceViewer 。使用命令面板中的“打开资源”选项来选择单个文件,或使用“提取包”(二者均以“PackageResourceViewer:”开头,或使用模糊搜索来添加 prv )以将整个包提取到Packages文件夹中,通过选择 Sublime Text → Preferences → Browse Packages… (在其他操作系统上仅为 Preferences → Browse Packages… )访问。它位于您的硬盘驱动器上的以下位置:
  • Linux:~/.config/sublime-text-3/Packages
  • OS X:~/Library/Application Support/Sublime Text 3/Packages
  • Windows常规安装:C:\Users\YourUserName\AppData\Roaming\Sublime Text 3\Packages
  • Windows便携式安装:InstallationFolder\Sublime Text 3\Data\Packages

  • 一旦将文件保存到Packages文件夹中(如果仅通过“打开资源”选项查看它们并关闭而不更改或保存它们,它们将不会被保存),它们将覆盖.sublime-package存档中包含的同名文件。因此,例如,如果您要编辑Python.sublime-build包中的默认Python文件,您的更改将保存为Packages/Python/Python.sublime-build,并且当您从菜单中选择Python构建系统时,它将仅使用您的版本。

    关于python - 使用Sublime Text 3在Python 3中打印UTF-8,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39576308/

    10-12 16:38
    查看更多