使用 Sublime Text 3 在 Python 3 中打印 UTF-8

Posted

技术标签:

【中文标题】使用 Sublime Text 3 在 Python 3 中打印 UTF-8【英文标题】:printing UTF-8 in Python 3 using Sublime Text 3 【发布时间】:2017-01-27 07:52:59 【问题描述】:

我有这个 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 更改此环境变量,它仍然无法修复它。

【问题讨论】:

试试print(line.decode()) SublimeText 输出设备似乎只处理 ASCII ......检查 SublimeText 选项,看看你是否可以做点什么。 decode 不是字符串中的方法。我已经在上面更新了一些信息。 我仍然相信这是一个 Sublime Text 问题:它告诉 python 解释器使用 ASCII 来显示输出。要解决这个问题,你应该找到 SublimeText 终端的配置并在那里选择编码,或者正确设置环境变量。 我也这么认为——只是还没有找到它,所以我希望周围有一些崇高的文字忍者:) 【参考方案1】:

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

幸运的是,ST3 构建系统(我不知道 ST2)有 "env" 选项。这是传递给exec.py 的键和值的字典,它负责在没有"target" 选项集的情况下运行构建系统。正如我们在上面的 cmets 中所讨论的,我指出当在 Linux 上使用 ST3(Build 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\<b><i>YourUserName</i></b>\AppData\Roaming\Sublime Text 3\Packages Windows 便携式安装:<b><i>InstallationFolder</i></b>\Sublime Text 3\Data\Packages

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

【讨论】:

很棒的答案,我非常感谢细节!这对我有用。【参考方案2】:

它可以工作,谢谢,Sublime Text 3 的完整构建系统脚本

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


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

【讨论】:

【参考方案3】:

请注意,如果您将 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"
 

【讨论】:

以上是关于使用 Sublime Text 3 在 Python 3 中打印 UTF-8的主要内容,如果未能解决你的问题,请参考以下文章

Sublime Text 3使用方法

在 ubuntu 下优雅的使用 Sublime Text 3 写 Python

[转]在ubuntu下安装sublime text

Sublime text 3 中Package Control 的安装与使用方法(转自 http://devework.com/sublime-text-3-package-control.html)

关于Sublime Text 3的常见问题

Sublime Text 3 编辑器使用