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

相关推荐
wsj668882 分钟前
03 | Ollama:本地大模型部署与调用
python
夜郎king2 分钟前
厂区周边 3km POI 业态分布全景解析-以生产企业为例
大数据·人工智能·空间智能·空间可视化
美狐美颜sdk4 分钟前
美颜SDK开发难点有哪些?Android/iOS美颜SDK接入
人工智能·音视频·直播美颜sdk·视频美颜sdk·美狐美颜sdk
电科一班林耿超5 分钟前
深度学习大师课 第 1 课:什么是深度学习?纯手写你的第一个神经网络
人工智能·深度学习·神经网络
yaoxin5211235 分钟前
405. Java 文件操作基础 - 装饰者模式与 I/O Streams
java·开发语言·python
人月神话-Lee7 分钟前
【图像处理】颜色科学与灰度化——人眼看到的和数字记录的不一样
图像处理·人工智能·计算机视觉·ios·swift
Unbelievabletobe10 分钟前
免费外汇api的响应时间在不同时段下的波动分析
大数据·开发语言·前端·python
跨境卫士—小依10 分钟前
美国邮政渠道开始计税后跨境卖家如何重写小包报价逻辑
大数据·人工智能·安全·跨境电商·营销策略
wang3zc11 分钟前
CSS如何实现元素镜像翻转_使用transformscalex负值
jvm·数据库·python
zyq99101_113 分钟前
递归与动态规划实战代码解析
python·算法·蓝桥杯