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

标签 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 在终端中执行我的代码时,它可以正常工作。

我的构建配置是

{
"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 更改此环境变量它仍然没有解决它。

最佳答案

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

幸运的是,ST3 构建系统(我不知道 ST2)有 "env" 选项。这是传递给 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 通过包控制。使用命令面板中的“打开资源”选项选择单个文件或“提取包”(两者都以“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.sublime-build文件在 Python包,您的更改将保存为 Packages/Python/Python.sublime-build , 当您选择 Python从菜单构建系统,它只会使用你的版本。

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

相关文章:

python - 字符串列表到整数元组

python - 如何在 Python 中绘制置信区间?

Perl 在 Windows 中使用外来字符

utf-8 - 字节 0xFF 在 UTF-8 编码字符串中是否有效?

java - Java 使用 UTF-8 还是 UTF-16 编码?

python - Scrapy:抓取多个页面并在单个数组中生成结果

python - 如何为 Pandas DataFrame 中找到的所有唯一值设置相同的频率?

python-3.x - Python,dataframe sql join

python - 过滤表的算法

python - 从 'p' 中提取 'div' 中的文本