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

运行Python HTTP服务器时遭遇UnicodeDecodeError错误求助

解决python -m http.server 8080启动时的UnicodeDecodeError

这个错误本质上是因为Python的socket.getfqdn()函数在解析你的系统主机名时,遇到了无法用UTF-8解码的字节(这里是0xcf)——说明你的Windows主机名包含了非ASCII或编码不兼容的特殊字符。

下面是几个实用的解决办法,按推荐程度排序:

  • 方法一:直接指定绑定地址(最快最省心)
    启动服务器时明确绑定到127.0.0.1(仅本地访问)或者0.0.0.0(允许局域网访问),这样就会跳过主机名解析步骤:

    python -m http.server 8080 --bind 127.0.0.1
    

    验证一下,服务器应该能正常启动,访问http://localhost:8080就能看到文件列表了。

  • 方法二:修改系统主机名(彻底解决根源问题)
    如果不想每次都加--bind参数,可以修改你的Windows主机名,确保它只包含ASCII字符(字母、数字、连字符):

    1. 右键「此电脑」→「属性」
    2. 点击「更改设置」→「更改」按钮
    3. 输入新的纯ASCII主机名,确认后重启系统,再运行python -m http.server 8080就不会报错了。
  • 方法三:自定义服务器脚本(临时绕过方案)
    要是你暂时没法修改主机名,也可以写个简单的脚本替换默认的HTTP服务器,手动指定主机名避免解码错误:

    from http.server import HTTPServer, SimpleHTTPRequestHandler
    
    # 继承HTTPServer,重写server_bind方法跳过主机名解析
    class FixedHTTPServer(HTTPServer):
        def server_bind(self):
            self.server_name = "localhost"  # 直接设为已知的合法主机名
            super().server_bind()
    
    if __name__ == "__main__":
        # 绑定到8080端口
        server_address = ('', 8080)
        httpd = FixedHTTPServer(server_address, SimpleHTTPRequestHandler)
        try:
            print(f"Server running at http://localhost:8080")
            httpd.serve_forever()
        except KeyboardInterrupt:
            print("\nServer stopped by user.")
            httpd.shutdown()
    

    把这段代码保存为local_server.py,然后运行python local_server.py即可。

内容的提问来源于stack exchange,提问作者Semyon Kolesnikov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:32:35