为什么说程序员重命名时电脑不要带中文?记一次python manage.py runserver时UnicodeDecodeError的原因与解决方案

运行环境:

Win11系统,Anaconda Prompt,名为'rango'的虚拟环境,Edge浏览器。


问题描述

最近在根据《Tango with Django》这本书学习Django,结果在Anaconda黑窗口启用虚拟环境运行python manage.py runserver命令时意外报了 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xcc in position 8: invalid continuation byte的错误。该错误在重建 Django 项目、重新创建虚拟环境后仍然稳定复现,说明问题不在项目代码层面。

完整黑窗口命令以及报错记录如下:(JerryKing是我windows的本地用户名,Workspace是我练习django的文件夹,有类似情况的朋友路径应该是C:\Users\<你的username>\<你的workspace>)

复制代码

原因分析:

从上面图中 traceback 的最底部几行可以定位到关键调用链:

HTTPServer.server_bind(self)--socket.getfqdn(host)--socket.gethostbyaddr(name)

还有经常与中文字符问题相关的'utf-8'字样。

找到socket.py中的getfqdn(),本例中的name应该是127.0.0.1

错误就发生在这一行。

在 Windows 系统上,socket.gethostbyaddr() 会通过系统 API 反向解析本机 IP 地址,并返回当前电脑的 hostname(主机名)

当调用 gethostbyaddr('127.0.0.1') 时,Windows 网络栈将该地址识别为本机回环地址 ,并返回当前主机名

由于 Windows 返回的主机名使用本地编码(如 GBK),而 Python 标准库在接收该返回值时假定其为 UTF-8 编码,导致在解码阶段抛出 UnicodeDecodeError(Python 甚至"没来得及"成功给 hostname 赋值)。

而本人前几日在Windows的设置-系统中对电脑进行过重命名操作,且包含中文!

这就解释了为何会有UnicodeDecodeError但报错信息中未直接出现中文。


解决方案:

在Windows的设置-系统中对电脑进行重命名操作,且重命名后的主机名不能包含中文(即使windows允许你这么做)。重命名后重启电脑即可。

其他的碎碎念:

刚发现这个问题的时候,我实际上是直接把trackback丢给某知名国际GenAI了,但是其回复的方案是修改命令为python manage.py runserver 127.0.0.1:8000或者python manage.py runserver localhost:8000,但是都没用,问了四五遍还是在讲车轱辘话,再加上重新敲安装命令+反复测试又浪费了人生宝贵的30min。最后不得不动用脑细胞去看报错信息,找到对应的代码,然后又联想到前几日进系统设置修改过主机名,还带了中文字符,这才反应过来,实测修改为不含中文的主机名后就没有报错了。

这次经历我觉得有意义/有趣的一个地方在于,这个错误是由于一个看似不起眼的"局外"因素导致的------带有中文字符的主机名居然会导致runserver失败。这跟我平时"代码报错那肯定是代码哪里写错了"+"带utf-8的报错肯定是代码文件里带了中文导致的"的经验与思维惯性不同,这次代码文件没有任何问题,文件中也不含任何中文字符,但是还是出现了UTF-8解码错误,追根溯源竟然是主机名中的中文影响了程序的正常运行,而我也仅仅是前几天心血来潮才会去修改主机名(我猜大多数用户都不会这么做吧?),过了一阵子就导致了这么严重的后果。(假如这是我打开了辛苦编程了多日的网页项目,结果因为不明原因倒在了runserver这一步,因为看见了熟悉的utf8就想当然地去给所有代码文件都加了防止编码问题的代码,结果还是出问题然后心态崩溃+浪费大量精力时间balabalabala。)

另外还有一点我觉得这次经历是一个教训,我自己偷懒去问GenAI,但是被GenAI带偏后不自知还花大量时间做了很多无用功。而实际上当我开始动脑去找代码,看具体程序流,再到解决问题也就花了5分钟。把这当作一个教训,继续学习吧。

相关推荐
火山引擎开发者社区2 小时前
没有长期记忆,Agent 谈何持续进化?一图看懂火山 Mem0:解锁 Agent 持续学习与进化之路
人工智能
冬奇Lab5 小时前
Workflow 系列(06):安全——跨步骤注入传播与四层防御
人工智能·工作流引擎
冬奇Lab5 小时前
每日一个开源项目(第149篇):RAG-Anything - 把图片、表格、公式当成一等公民的多模态 RAG 框架
人工智能·开源
米小虾6 小时前
AI Agent 安全实战指南:当智能体开始"不听话",开发者该如何应对?
人工智能·安全·agent
IT_陈寒7 小时前
Vite的热更新突然不香了,排查三小时差点砸键盘
前端·人工智能·后端
用户8356290780518 小时前
Python 实现 PDF 文件加密与解密方法
后端·python
用户8356290780518 小时前
使用 Python 冻结与拆分 Excel 窗格教程
后端·python
阿里云大数据AI技术9 小时前
构建高转化海外电商搜索:阿里云OpenSearch行业算法版的全链路智能优化策略实战
人工智能·搜索引擎
Awu12279 小时前
⚡从零开发 Agent CLI(五)实现一个可治理、可扩展的工具系统
前端·人工智能·claude