【发布时间】:2019-04-01 00:46:11
【问题描述】:
我正在使用 jupyter 笔记本中的脚本。为了代码清晰,我想将一些定义“外包”到第二个脚本中。 但是在定义中有变音符号、'ü's、'ä's、'ö's 和其他。 定义如下所示:
an_outsourced_dict = {'Hello': 'Hallo', 'Door': 'Tür'}
在使用 importlib '导入'第二个脚本时遇到问题后,我现在正在运行
%run myotherscript.ipynb
在第一个脚本中,然后可以访问 myotherscript.ipynb 中定义的任何内容。
问题:
调用脚本中an_outsourced_dict的内容为{'Door': 'Tür', 'Hello': 'Hallo'},an_outsourced_dict['Door'] == 'Tür'返回False。
另外,当我在 mysecondscript.ipynb 中添加 print(an_outsourced_dict) 时,当通过 %run 调用时,它也会打印 'Tür'。 但是从主脚本定义和打印它会给出一个“Tür”。
(如何)这可以解决吗?现在我将所有内容都放在一个脚本中。
This 似乎相关,但我的问题不在于将任何内容写入文件。
附加信息:
Python 3.5 版,尝试按照here 的描述获取 ipython 版本也会出现编码错误:) 我在 Windows (8.1) 上
【问题讨论】:
-
我无法重现您的问题(Xubuntu 18.10、Python 3.6.7rc1、Jupyter 4.4.0)。我创建了一个 Python 3 笔记本“parent.ipynb”,其中包含
print('Hello Tür'),然后在第二个打印“Hello Tür”的笔记本中做了%run parent.ipynb。编码好像是utf-8,不知道为什么。请与import sys; sys.getdefaultencoding()联系。 -
@lumbric ,感谢您尝试复制。我的设置有点不同:我定义了字典,然后打印(thedict),而不仅仅是打印(“带有很多ü的字符串”)。是的,python 3 的默认编码似乎是 utf-8(来自我在搜索时发现的其他问题);这也是我运行 sys.getdefaultcoding() - 'utf-8' 时的输出。
-
脚本之间的编码似乎搞砸了
-
我可以使用 Python 3.3(笔记本 4.2.3)进行复制,但使用 Python 3.7(笔记本 5.7.0)运行并刷新正确打印的单元格。看起来旧的 Jupyter 笔记本使用 Windows 默认的 ANSI 编码(可能是 Windows-1252)解码了导入的脚本,而新的默认为 UTF-8。 .ipynb 内容被编码为 UTF-8。所以看起来它只是笔记本中的一个错误或其依赖项,已在较新版本中得到修复。
标签: python utf-8 jupyter-notebook