在Windows7下的任何浏览器中,我都无法加载ipython笔记本。我收到以下错误。我尝试过使用资源管理器,Firefox和Chrome。我和Enthought和Anaconda有同样的行为。
Ipython(没有笔记本工作正常)。这是错误跟踪的结束:
ctype = ctype.encode(default_encoding) # omit in 3.x
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd7 in position 2: ordinal not in range(128)
2014-02-18 15:34:47.401 [tornado.access] ERROR | 500 GET /static/custom/custom.js (127.0.0.1) 145.00ms`
答案 0 :(得分:1)
原因在this answer中确定。
但不是
try:
ctype = ctype.encode(default_encoding) # omit in 3.x!
except UnicodeEncodeError:
pass
您可以尝试,因为它毕竟是DecodeError:
try:
ctype = ctype.encode(default_encoding) # omit in 3.x!
except UnicodeEncodeError, UnicodeDecodeError:
pass
很可能发生在多字节编码系统中。在这种情况下,注册表中有一个mime类型包含多字节char。 Python发现它是一个ascii字符串(这是错误的,这就是为什么你看到ascii解码错误)并尝试在它实际执行编码之前转换为Python的内部字符串表示。然后它会因UnicodeDecodeError异常而悲伤。此时还没有UnicodeEncodeEorror。
要使整个内部过程清晰,您可以显式地将ctype转换为unicode以使其继续进入编码阶段,例如
ctype = unicode(ctype, youractualencoding).encode(default_encoding)
然后它(可能)会抛出UnicodeEncodeError,因为在这种情况下default_encoding是ascii,它无法处理多字节字符(这也是它首先失败的原因)。所以我们需要处理UnicodeEncodeError和UnicodeDecodeError。
现在你看到这里发生了什么。 IPython笔记本试图加载像custom.js这样的外部资源。它查看注册表以找出内容类型。然后它被异国情调的哑剧类型所窒息。