使用 Sublime Text 3 在 Python 3 中打印 UTF-8
printing UTF-8 in Python 3 using Sublime Text 3
我有这个 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 字符...
此外,如果我尝试根据 更改此 env 变量,它仍然无法修复它。
答案实际上在您问题中链接的问题中 - PYTHONIOENCODING
需要设置为 "utf-8"
。但是,由于 OS X 是愚蠢的,并且不会在终端或通过 .bashrc
或类似文件设置的环境变量上获取,因此这不会按照其他问题的答案中指示的方式工作.相反,您需要将该环境变量传递给 Sublime。
幸运的是,ST3 构建系统(我不知道 ST2)有 "env"
选项。这是传递给 exec.py
的键和值的字典,它负责 运行ning 没有设置 "target"
选项的构建系统。正如我们在上面的评论中所讨论的,我指出当 运行 和 Linux 上的 ST3(Build 3122)时,您的示例程序在包含非 ASCII 字符的 UTF-8 编码文本文件上运行良好,但不是在 OS X 上使用相同的版本 运行。将它变成 运行 所需要做的就是更改构建系统以包含此行:
"env": {"PYTHONIOENCODING": "utf8"},
我保存了构建系统,点击⌘B,程序运行正常。
顺便说一句,如果您想阅读 exec.py
、Packages/Python/Python.sublime-build
或任何其他打包在 .sublime-package
存档中的文件,请通过 Package 安装 PackageResourceViewer
控制。使用命令面板中的 "Open Resource" 选项选择单个文件,或 "Extract Package"(两者前面都有 "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>你的用户名</i></b>\AppData\Roaming\Sublime 文本3\Packages
- Windows 便携式安装:
<b><i>InstallationFolder</i></b>\Sublime Text 3\Data\Packages
一旦文件保存到您的 Packages
文件夹(如果您只是通过 "Open Resource" 选项查看它们并在不更改或保存它们的情况下关闭它们,它们将不会),它们将覆盖.sublime-package
存档中包含的同名文件。因此,例如,如果您想编辑 Python
包中的默认 Python.sublime-build
文件,您的更改将保存为 Packages/Python/Python.sublime-build
,并且当您选择 Python
构建时系统,它将只使用您的版本。
它可以工作,谢谢,Sublime Text 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"}
}
我有这个 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 字符...
此外,如果我尝试根据
答案实际上在您问题中链接的问题中 - PYTHONIOENCODING
需要设置为 "utf-8"
。但是,由于 OS X 是愚蠢的,并且不会在终端或通过 .bashrc
或类似文件设置的环境变量上获取,因此这不会按照其他问题的答案中指示的方式工作.相反,您需要将该环境变量传递给 Sublime。
幸运的是,ST3 构建系统(我不知道 ST2)有 "env"
选项。这是传递给 exec.py
的键和值的字典,它负责 运行ning 没有设置 "target"
选项的构建系统。正如我们在上面的评论中所讨论的,我指出当 运行 和 Linux 上的 ST3(Build 3122)时,您的示例程序在包含非 ASCII 字符的 UTF-8 编码文本文件上运行良好,但不是在 OS X 上使用相同的版本 运行。将它变成 运行 所需要做的就是更改构建系统以包含此行:
"env": {"PYTHONIOENCODING": "utf8"},
我保存了构建系统,点击⌘B,程序运行正常。
顺便说一句,如果您想阅读 exec.py
、Packages/Python/Python.sublime-build
或任何其他打包在 .sublime-package
存档中的文件,请通过 Package 安装 PackageResourceViewer
控制。使用命令面板中的 "Open Resource" 选项选择单个文件,或 "Extract Package"(两者前面都有 "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>你的用户名</i></b>\AppData\Roaming\Sublime 文本3\Packages
- Windows 便携式安装:
<b><i>InstallationFolder</i></b>\Sublime Text 3\Data\Packages
一旦文件保存到您的 Packages
文件夹(如果您只是通过 "Open Resource" 选项查看它们并在不更改或保存它们的情况下关闭它们,它们将不会),它们将覆盖.sublime-package
存档中包含的同名文件。因此,例如,如果您想编辑 Python
包中的默认 Python.sublime-build
文件,您的更改将保存为 Packages/Python/Python.sublime-build
,并且当您选择 Python
构建时系统,它将只使用您的版本。
它可以工作,谢谢,Sublime Text 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"}
}