运行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字符(字母、数字、连字符):- 右键「此电脑」→「属性」
- 点击「更改设置」→「更改」按钮
- 输入新的纯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
相关产品推荐
相关产品推荐

