Win10下Anaconda启动报UnicodeEncodeError: surrogates not allowed如何解决
根因分析
该报错不属于Anaconda本身的缺陷,根源是你系统环境变量(用户变量/系统变量)中混入了包含非法代理字符\udd8e的异常条目,conda在执行激活逻辑读取环境变量时,无法对该异常字符进行UTF-8编码导致启动中断。你之前尝试的重装Anaconda、升级Python等操作无法生效,是因为操作没有触及环境变量的异常源头;删除tempfile.py属于错误操作,该文件是Python标准库核心文件,请尽快恢复避免后续出现其他运行问题。
永久修复方案
- 按下Win+R,输入
sysdm.cpl回车,在弹出的窗口切换到「高级」选项卡,点击「环境变量」 - 分别检查用户变量、系统变量中的所有条目,重点排查
Path、TEMP、TMP三类conda激活时会调用的变量,找到显示为乱码、包含异常字符的条目,删除或修正该条目即可 - 排查完成后重启电脑,再次启动Anaconda Prompt即可恢复正常
临时应急方案
如果暂时无法定位到异常环境变量条目,可以通过修改conda源码绕过编码校验:
- 打开路径
C:\ProgramData\Anaconda3\lib\site-packages\conda\,找到activate.py文件用文本编辑器打开 - 定位到第143行的代码:
tf.write(self.command_join.join(commands))
- 修改为以下内容,遇到无法编码的字符会自动替换为占位符,不会抛出中断错误:
tf.write(self.command_join.join(commands).encode('utf-8', 'replace').decode('utf-8'))
- 保存文件后重新启动Anaconda Prompt即可正常运行
内容的提问来源于stack exchange,提问作者fsharp
相关产品推荐
相关产品推荐

