为什么说程序员重命名时电脑不要带中文?记一次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分钟。把这当作一个教训,继续学习吧。

相关推荐
QinHsiu4 分钟前
5种方案、3个工程问题、1个务实路线图:AI Agent上下文管理的“战国时代”
人工智能
y = xⁿ5 分钟前
拆解cloud code记忆系统
java·人工智能·python·github
zzu123zsw7 分钟前
打破单模型幻觉与信息茧房:24k Star 开源 BettaFish 的多智能体辩论拓扑与实时舆情研判实战
python
Dawson Zhu8 分钟前
【AI Infra小白入门④】AI Infra学习路线图:从入门到精通的完整指南(附核心思维方法)
人工智能·语言模型·架构·aigc·agi
QinHsiu8 分钟前
99%的AI短剧创作者月入不足10元:工具已经白菜价,但赚钱的依然是那1%
人工智能
愤怒火龙果9 分钟前
AI攻防 LLM中间件
人工智能·网络安全·中间件
艾莉丝努力练剑10 分钟前
【AI大模型接入SDK】ChatServer接口设计规范
网络·c++·人工智能·学习·大模型·设计规范
摇滚侠11 分钟前
《大模型应用开发实践:基于 Spring AI+DeepSeek 实现》第 12 章 Spring AI 开发入门 阅读笔记 2
人工智能·笔记·spring
武汉星际互动12 分钟前
技术拐点已至:AI Agent给政务大厅带来什么变革?
大数据·人工智能·政务
科技研学社12 分钟前
服装AI视觉质检落地实战:从人工验布到自动缺陷检测的多品牌方案对比
人工智能