Django新手求助:执行runserver命令时遇UnicodeDecodeError错误
解决Python 3.6.4中runserver时socket.getfqdn的UnicodeDecodeError问题
嘿,作为曾经踩过Windows编码坑的开发者,我太懂你这种找不到解决方案的焦虑了!你遇到的这个错误是因为socket.getfqdn()在解析你的主机名时,碰到了无法用UTF-8解码的字符(就是报错里的0xe8字节),Python 3.6.4对这种情况的处理还不够完善。
给你几个可行的解决思路:
临时应急修改(快速生效):
直接修改虚拟环境里的socket.py文件,路径是C:\Users\Ines\Anaconda3\envs\DjangoApps\lib\socket.py。找到报错的第673行左右的代码:hostname, aliases, ipaddrs = gethostbyaddr(name)把这段代码替换成带异常捕获的版本:
try: hostname, aliases, ipaddrs = gethostbyaddr(name) except UnicodeDecodeError: hostname = name这样当解码失败时,会直接返回传入的name值,绕过编码错误。
根治方案(推荐):
检查你的Windows计算机名,是不是包含了非UTF-8的特殊字符?比如某些带重音的字符或者中文(0xe8通常对应中文里的特定字符)。你可以通过「控制面板 → 系统和安全 → 系统 → 更改设置 → 更改」来修改计算机名,改成纯英文或UTF-8兼容的字符,重启后再试试runserver。长远方案:
考虑升级Python版本到3.7及以上,这个编码问题在后续的Python版本中已经被官方修复了,对主机名的解析逻辑做了优化,不会再出现这种DecodeError。
对了,卸载重装确实没用,因为问题根源不在环境本身,而是主机名编码和Python 3.6.4的兼容性问题~
内容的提问来源于stack exchange,提问作者Ines Tlili
相关产品推荐
相关产品推荐

