使用升华文本3在Python 3中打印UTF-8
我有一个Python3代码试图从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) 然而,当
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"}
}