使用升华文本3在Python 3中打印UTF-8

使用升华文本3在Python 3中打印UTF-8,python,python-3.x,utf-8,sublimetext3,sublimetext,Python,Python 3.x,Utf 8,Sublimetext3,Sublimetext,我有一个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代码试图从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编码的字节字符串(我想这就是发生的情况)

但我也不知道如何在屏幕上打印unicode字符


此外,如果我尝试根据更改此env变量,它仍然无法修复它。

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

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

"env": {"PYTHONIOENCODING": "utf8"},
我保存了构建系统,点击⌘B、 程序运行良好

顺便说一句,如果您想阅读
exec.py
、或
Packages/Python/Python.sublime build
、或打包在
.sublime package
存档中的任何其他文件,请通过包控制进行安装。使用命令选项板中的“打开资源”选项选择单个文件,或“提取软件包”(两者前面都有“PackageResourceViewer:”,或使用模糊搜索将整个软件包提取到您的
软件包
文件夹中,可通过选择
升华文本访问该文件夹→ 偏好→ 浏览软件包…
(仅限于
首选项→ 浏览软件包…
在其他操作系统上)。它位于硬盘上的以下位置:

  • 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

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

谢谢,升华文本3的完整构建系统脚本

工具->构建系统->新构建系统

{
    "shell_cmd": "python \"$file\"",
    "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
    "selector": "source.python",
    "env": {"PYTHONIOENCODING": "utf8"}
}

注意:如果将venv与S3一起使用,则需要更新Python+Virtualenv.sublime-build资源文件

{
    "target": "virtualenv_exec",
    "shell_cmd": "python -u \"$file\"",
    "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
    "selector": "source.python",
    "env": {"PYTHONIOENCODING": "utf-8"}
} 

尝试打印(line.decode())似乎升华文本输出设备只处理ASCII。。。选中SublimiteText选项以查看是否可以对此执行某些操作。decode不是字符串中的方法。我已经用另外一点信息更新了上面的内容。我仍然认为这是一个极好的文本问题:它告诉python解释器使用ASCII来显示输出。要解决这个问题,你应该找到SublimiteText终端的配置并在那里选择编码,或者正确设置环境变量。我也这么认为-只是还没有找到,所以我希望有一些SublimiteText忍者:)真棒的答案,我真的很欣赏细节!这对我有用。
{
    "target": "virtualenv_exec",
    "shell_cmd": "python -u \"$file\"",
    "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
    "selector": "source.python",
    "env": {"PYTHONIOENCODING": "utf-8"}
}