参考资料:
django项目启动时报 'str' object has no attribute 'decode' - python黑客编程 - 博客园 (cnblogs.com)
(1条消息) AttributeError: ‘str‘ object has no attribute ‘decode‘_待到春花烂漫时-CSDN博客
项目版本
Python:3.7
Django:2.2
问题描述
在启动项目后,访问系统页面,报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0xa6 in position 9737: illegal multibyte sequence
解决该报错后,再次访问,报错:AttributeError: 'str' object has no attribute 'decode'
解决
报错1:
打开[python所在目录]\Lib\site-packages\django\views\debug.py文件,转到line331:
with Path(CURRENT_DIR, 'templates', 'technical_500.html').open() as fh
将其改成:(加上encoding="utf-8")
with Path(CURRENT_DIR, 'templates', 'technical_500.html').open(encoding="utf-8") as fh
即可解决。
报错2:
打开[python所在目录]\Lib\site-packages\django\db\backends\mysql\operations.py文件,转到line146,找到:
query = query.decode(errors='replace')
将decode改成encode即可:
query = query.encode(errors='replace')
ps:
- 关于此报错,网上还有两种说法可解决:
-
- 将query = query.decode(errors='replace')所在这一段注释(似乎不可以)
- 更换django的版本:这是django2.2的一个bug,将django换成更高或更地的版本可以解决。
总结
- 这个错误主要是python版本和django版本不对应的问题,python3中没有decode方法,但是django还在用,因此造成了错误。在另一个环境中,用的python3.7+django3,就没有同样的错误。
- 在python3里面,字符串要先encode手动指定其为某一编码的字节码之后,才能decode解码。比如:.encode('utf-8').decode('unicode_escape')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗