You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows10运行Flask HelloWorld时socket.gethostbyaddr报UnicodeDecodeError

解决Flask启动时socket模块的UnicodeDecodeError问题

这个问题是因为socket.getfqdn函数在解析主机相关信息时,遇到了无法用UTF-8解码的特殊字符(错误里的0xab字节)——虽然你的主机名是Pitku,但系统的Hosts文件、DNS解析返回的别名或网络配置里可能藏着乱码字符。下面给你几个不用修改socket源码的解决方案:

方案1:手动指定Flask的运行主机地址

Flask默认会调用getfqdn获取主机名,你可以直接在启动时指定host参数为明确的IP地址,跳过自动解析步骤。示例代码:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

if __name__ == '__main__':
    # 直接指定本地回环地址,避免调用getfqdn
    app.run(host='127.0.0.1', port=5000)

方案2:检查并修复系统Hosts文件

系统Hosts文件里的异常条目可能导致这个报错,按以下步骤操作:

  • 用管理员权限打开记事本,路径是C:\Windows\System32\drivers\etc\hosts
  • 查找包含Pitku的行,确保格式是127.0.0.1 Pitku或者::1 Pitku,没有多余的特殊字符
  • 保存文件后,重启你的网络连接(可以用命令行执行netsh winsock reset)

方案3:临时覆盖socket.getfqdn函数

不用修改socket.py源码,在你的Flask代码开头重新定义这个函数,让它直接返回你的主机名,绕过原来的解析逻辑:

import socket
# 替换getfqdn,直接返回你的主机名
socket.getfqdn = lambda name='': 'Pitku'

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

if __name__ == '__main__':
    app.run()

方案4:排查系统网络名称配置

有时候系统的NetBIOS名称或域相关配置会带特殊字符,你可以:

  • 右键「此电脑」→「属性」→「高级系统设置」→「计算机名」,确认没有隐藏的特殊字符
  • 打开命令提示符,执行nbtstat -n,查看NetBIOS名称列表,看看有没有带乱码的条目,如有异常可以尝试重置计算机名称

内容的提问来源于stack exchange,提问作者P. Kopacki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:53:11