gpt4 book ai didi

python - IPython 中的 UnicodeEncodeError 但不是标准 REPL

转载 作者:太空宇宙 更新时间:2023-11-03 21:07:45 34 4
gpt4 key购买 nike

我正在使用 Python 3.6.3 读取包含 Unicode 字符的文件。在标准 Python REPL 中,我可以通过指定 UTF-8 编码毫无问题地读取文件:

>>> with open("emoji.csv", encoding='utf-8') as f:
... lines = f.readlines()
>>> lines
['this line has an emoji \U0001f644\n']

没有问题。但是,当我在 IPython 6.1.0 中尝试相同的操作时,我收到以下 UnicodeEncodeError:

In [1]: with open('emoji.csv', encoding='utf-8') as f:
...: lines = f.readlines()
...:

In [2]: lines
Out[2]: ---------------------------------------------------------------------------
UnicodeEncodeError Traceback (most recent call last)
<ipython-input-2-3fb162a4fe05> in <module>()
----> 1 lines

/opt/anaconda/lib/python3.6/site-packages/IPython/core/displayhook.py in __call__(self, result)
259 self.fill_exec_result(result)
260 if format_dict:
--> 261 self.write_format_data(format_dict, md_dict)
262 self.log_output(format_dict)
263 self.finish_displayhook()

/opt/anaconda/lib/python3.6/site-packages/IPython/core/displayhook.py in write_format_data(self, format_dict, md_dict)
188 result_repr = '\n' + result_repr
189
--> 190 print(result_repr)
191
192 def update_user_ns(self, result):

UnicodeEncodeError: 'ascii' codec can't encode character '\U0001f644' in position 24: ordinal not in range(128)

类似地,如果我尝试简单地自行编码和解码 Unicode 字符,我会得到相同的错误:

In [1]: '\U0001f644'.encode('utf-8').decode('utf-8')
Out[1]: ---------------------------------------------------------------------------
...
...
UnicodeEncodeError: 'ascii' codec can't encode character '\U0001f644' in position 1: ordinal not in range(128)

是什么原因造成的?如何在 IPython 中读取此文件?

编辑:这似乎是 IPython 的一个功能,默认使用 ASCII 编码:

In [1]: from IPython.utils.encoding import get_stream_enc; import sys

In [2]: get_stream_enc(sys.stdout)
Out[2]: 'ANSI_X3.4-1968'

但是,我在 IPython 文档中没有看到任何有关如何更改此设置的内容。这可能吗?

最佳答案

这是因为我的系统使用 POSIX 语言环境。设置 $PYTHONIOENCODING=UTF-8 通过覆盖 IPython 默认使用的基于 ASCII 的编码解决了该问题。

关于python - IPython 中的 UnicodeEncodeError 但不是标准 REPL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55288741/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com