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

all*_*tar 14 python utf-8 python-3.x sublimetext sublimetext3

我有这个Python3代码尝试从utf-8编码文件中读取和打印:

f = open('mybook.txt', encoding='utf-8')
for line in f:
    print(line)
Run Code Online (Sandbox Code Playgroud)

当我使用Sublime Text 3构建时,我收到以下错误:

UnicodeEncodeError: 'ascii' codec can't encode character '\u2019' in position 18: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)

但是,当我用python3在终端中执行我的代码时,它工作文件.

我的构建配置是

{
"cmd": ["/usr/local/bin/python3", "$file"]
, "selector": "source.python"
, "file_regex": "file \"(...*?)\", line ([0-9]+)"
}
Run Code Online (Sandbox Code Playgroud)

如果我将其更改为:

f = open('mybook.txt', encoding='utf-8')
for line in f:
    print(line.encode('utf-8'))
Run Code Online (Sandbox Code Playgroud)

然后它会打印utf-8编码的字节串(我认为这是正在发生的事情).

b'Hello\n'
b'\xc2\xab\xe2\x80\xa2\n'
b'Goodbye'
Run Code Online (Sandbox Code Playgroud)

但我也不知道如何从这个到打印屏幕上的unicode字符......

另外,如果我按照一个python程序尝试更改这个env变量,则无法在sublime文本3中执行,但是在bash中成功它仍然无法修复它.

Mat*_*DMo 34

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

幸运的是,ST3构建系统(我不知道ST2)可以"env"选择.这是传递给的键和值的字典exec.py,它负责在没有"target"选项集的情况下运行构建系统.正如我们在上面的评论中所讨论的,我表示您的示例程序在包含非ASCII字符的UTF-8编码文本文件上运行正常,当在Linux上运行ST3(Build 3122)时,但在OS X上运行的版本不同让它运行所需的只是更改构建系统以包含这一行:

"env": {"PYTHONIOENCODING": "utf8"},
Run Code Online (Sandbox Code Playgroud)

我保存了构建系统,点击B,程序运行正常.

顺便说一句,如果您想阅读exec.py,或者Packages/Python/Python.sublime-build.sublime-package存档中打包的任何其他文件,请PackageResourceViewer通过Package Control进行安装.使用命令选项板中的"打开资源"选项选择单个文件,或"提取包"(两者都以"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\YourUserName\AppData\Roaming\Sublime Text 3\Packages
  • Windows便携式安装: InstallationFolder\Sublime Text 3\Data\Packages

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


Sun*_*Wei 9

感谢Sublime Text 3的完整构建系统脚本

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

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