【django】报错解决:编码问题导致项目无法被访问(返回500)

参考资料

针对django2.2报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0xa6 in position 9737: ill.... - 人生如梦,亦如幻 - 博客园 (cnblogs.com)

django项目启动时报 'str' object has no attribute 'decode' - python黑客编程 - 博客园 (cnblogs.com)

(1条消息) ,跪求大神解答。-Python-CSDN问答

(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:

  • 关于此报错,网上还有两种说法可解决:

    1. query = query.decode(errors='replace')所在这一段注释(似乎不可以)

    2. 更换django的版本:这是django2.2的一个bug,将django换成更高或更地的版本可以解决。

总结

  1. 这个错误主要是python版本和django版本不对应的问题,python3中没有decode方法,但是django还在用,因此造成了错误。在另一个环境中,用的python3.7+django3,就没有同样的错误。

  2. 在python3里面,字符串要先encode手动指定其为某一编码的字节码之后,才能decode解码。比如:.encode('utf-8').decode('utf-8')

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值