我有以下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变量,则python程序无法在sublime text 3中执行,但在bash中成功则无法解决该问题。
答案实际上是在您的问题所链接的问题中- PYTHONIOENCODING
需要设置为"utf-8"
。但是,由于OS X很愚蠢,并且无法使用Terminal或通过.bashrc
类似文件中设置的环境变量,因此这将无法解决其他问题。相反,您需要将该环境变量传递给Sublime。
幸运的是,ST3构建系统(我不了解ST2)可以"env"
选择。这是传递给的键和值的字典exec.py
,它负责在不设置"target"
选项的情况下运行构建系统。正如我们在上面的评论中讨论的那样,我表明您的示例程序在Linux上以ST3(内部版本3122)运行时,在包含非ASCII字符的UTF-8编码文本文件上可以正常工作,但在OS X上运行的版本与此不同要使其运行,所需要做的就是更改构建系统以包含以下行:
"env": {"PYTHONIOENCODING": "utf8"},
我保存了构建系统,点击⌘B,程序运行正常。
顺便说一句,如果您想读取exec.py
,或Packages/Python/Python.sublime-build
或压缩文件中打包的任何其他文件.sublime-package
,请PackageResourceViewer
通过Package Control 安装。使用命令面板中的“打开资源”选项来选择单个文件,或使用“提取包”(两者都以“ PackageResourceViewer:”开头,或prv
使用模糊搜索)将整个包提取到您的Packages
文件夹中,可通过选择Sublime Text → Preferences → Browse Packages…
(仅Preferences → Browse Packages…
在其他操作系统上)。它位于您的硬盘驱动器上的以下位置:
~/.config/sublime-text-3/Packages
~/Library/Application Support/Sublime Text 3/Packages
C:\Users\YourUserName\AppData\Roaming\Sublime Text 3\Packages
InstallationFolder\Sublime Text 3\Data\Packages
将文件保存到Packages
文件夹后(如果仅通过“打开资源”选项查看文件,然后关闭而不更改或保存它们,则不会保存),它们将覆盖.sublime-package
存档中包含的相同名称的文件。因此,例如,如果要编辑软件包中的默认Python.sublime-build
文件,则Python
所做的更改将另存为Packages/Python/Python.sublime-build
,并且当您Python
从菜单中选择构建系统时,它将仅使用您的版本。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句