在Windows CMD启动Jupyter Notebook时遭遇UnicodeDecodeError问题
解决Windows 7 CMD启动Jupyter Notebook的Unicode解码错误
我之前也碰到过一模一样的问题,这本质是编码不匹配导致的:Jinja2模板加载器默认用UTF-8编码读取文件,但你的browser-open.html模板实际是用Windows系统默认的GBK(ANSI)编码保存的,字节0x9f是GBK里的有效字符,放到UTF-8解码逻辑里就触发了错误。下面给你几个实用的解决办法:
方法一:重新保存模板文件为UTF-8编码
- 跟着报错路径找到模板文件:
c:\users\sushant\appdata\local\programs\python\python37\lib\site-packages\notebook\templates\browser-open.html - 用记事本打开这个文件,点击顶部菜单栏的「文件」→「另存为」
- 在弹出的窗口里,把「编码」选项改成「UTF-8」,点击「保存」覆盖原文件
- 回到CMD重新运行
jupyter notebook试试
方法二:设置Python强制使用UTF-8编码
- 在CMD里先执行这条命令:
set PYTHONUTF8=1 - 接着再启动Jupyter:
jupyter notebook - 这个环境变量会让Python全局强制用UTF-8处理文件读写,直接绕过编码不匹配的问题
方法三:修改Jupyter源码指定模板编码(进阶)
如果前两个方法没效果,可以试试修改Jupyter源码来适配系统编码:
- 打开文件:
c:\users\sushant\appdata\local\programs\python\python37\lib\site-packages\notebook\notebookapp.py - 找到
_write_browser_open_file方法里加载模板的代码行:template = jinja2_env.get_template('browser-open.html') - 找到Jinja2环境初始化的位置,添加
encoding='gbk'参数(Windows默认编码是GBK),比如把环境初始化代码改成类似jinja2_env = Environment(loader=loader, encoding='gbk') - 保存修改后重启Jupyter
一般来说前两个方法就能搞定,方法三适合有一定Python基础的用户。
内容的提问来源于stack exchange,提问作者user10281103




