Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用升华文本3在Python 3中打印UTF-8_Python_Python 3.x_Utf 8_Sublimetext3_Sublimetext - Fatal编程技术网

使用升华文本3在Python 3中打印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) 然而,当

我有一个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编码的字节字符串(我想这就是发生的情况)

但我也不知道如何在屏幕上打印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
构建系统时,它将只使用您的版本。

答案实际上在您问题中链接的问题中-
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
文件,您的更改将保存为{ "shell_cmd": "python \"$file\"", "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)", "selector": "source.python", "env": {"PYTHONIOENCODING": "utf8"} }
{
    "target": "virtualenv_exec",
    "shell_cmd": "python -u \"$file\"",
    "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
    "selector": "source.python",
    "env": {"PYTHONIOENCODING": "utf-8"}
}