我有一个Python3代码试图从utf-8编码的文件中读取和打印:

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

当我使用Supreme 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字符...

此外,如果我try 按照A python program fails to execute in sublime text 3, but success in bash更改这个env变量,它仍然无法修复它.

推荐答案

答案实际上是在你的问题中链接的问题中——PYTHONIOENCODING需要设置为"utf-8".然而,由于OSX很傻,而且不会通过终端或.bashrc或类似文件获取环境变量集,因此这不会以另一个问题的答案所示的方式工作.相反,您需要将该环境变量传递给Sublize.

幸运的是,ST3构建系统(我不知道ST2)有"env"个选项.这是传递给exec.py的键和值的字典,exec.py负责运行没有"target"选项集的构建系统.正如我们在上面的 comments 中所讨论的,我指出,当在Linux上使用ST3(Build 3122)运行时,您的示 routine 序在包含非ASCII字符的UTF-8编码文本文件上运行得很好,但在OS X上运行的版本不同.要使其运行,只需更改生成系统以隐藏这一行:

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

我保存了构建系统,点击B,程序运行正常.

顺便说一句,如果你想阅读exec.py,或Packages/Python/Python.sublime-build,或任何其他文件打包在.sublime-package存档,安装PackageResourceViewer通过包控制.使用命令选项板中的"打开资源"选项 Select 单个文件,或"提取软件包"(两者前面都有"PackageResourceViewer:",或使用模糊搜索的104),将整个软件包提取到Packages文件夹中,通过 Select 106(在其他操作系统上仅107)可访问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包中的默认Python.sublime-build文件,您的更改将保存为Packages/Python/Python.sublime-build,当您从菜单中 Select Python构建系统时,它将只使用您的版本.

Python-3.x相关问答推荐

如何从拼图分区数据集中读取数据到Polar

我无法直接在 VSCode 中运行该程序,但可以使用 VScode 中的终端运行它

PyQt5 中耦合滑块和拨号小部件.解决结果不一致的问题

链接列未延伸到数据框的末尾

在不使用 split 函数的情况下从字符串中分割逗号(','),句号('.')和空格(' '),将字符串的单词附加到列表中

如何使用python将pdf文件的页面合并为单个垂直组合页面

如何创建与导航抽屉一起使用的导航栏

将自动文本转换为 DataFrame

Python Regex 查找给定字符串是否遵循交替元音、辅音或辅音、元音的连续模式

spinbutton调整up/down箭头

RGB 图像中最主要的 colored颜色 - OpenCV / NumPy / Python

Await Future 来自 Executor:Future 不能在await表达式中使用

Python从base64转换为二进制

无法在 Windows Python 3.5 上安装 Levenshtein 距离包

if 语句中冒号的语法错误

如何在多核上运行 Keras?

每次启动 Google Colab 时都必须安装所需的软件包吗?

如何使用已打开并使用登录凭据登录的浏览器

首次使用后 zip 变量为空

print(... sep='', '\t' ) 是什么意思?