Flask渲染模板时出现UnicodeDecodeError错误求助
Flask模板渲染UnicodeDecodeError问题原因解析
错误核心
你遇到的 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte,本质是你的index.html文件实际编码不是UTF-8,而是带BOM的UTF-16(通常是UTF-16 LE)。
跨环境差异的原因
- Windows下的编辑器保存文件时,可能默认给UTF-16编码的文件加上BOM(字节顺序标记,开头的0xff就是其中一部分),而Python 3.9读取文件时会自动识别并处理这种带BOM的编码,所以没触发错误。
- Linux系统的Python 3.10中,Flask渲染模板时默认用UTF-8编码读取文件,遇到UTF-16的BOM字节0xff,UTF-8解码器无法解析,直接抛出解码错误。
- 直接返回字符串
return "Hello world"不需要读取本地模板文件,自然不会碰到文件编码问题,所以能正常运行。
验证方式
在Linux终端执行 file index.html 命令,查看文件实际编码,结果大概率会显示类似 UTF-16 Unicode text, little-endian。
解决方向
- 用编辑器重新保存index.html为不带BOM的UTF-8(主流编辑器如VS Code、Vim都支持在保存时选择编码),这是最推荐的方式,能避免跨环境编码问题。
- 临时方案:修改render_template调用,指定文件编码:
return render_template("index.html", _encoding='utf-16'),但不建议长期使用,编码统一才是根本。
内容的提问来源于stack exchange,提问作者Leonardo Orengo
相关产品推荐
相关产品推荐

