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

TypeError:Unicode对象哈希前需编码,代码报错求助

解决TypeError: Unicode-objects must be encoded before hashing错误

这个报错在Python 3里太常见了,我来给你拆解下原因和解决办法:

错误原因

你遇到的问题核心是Python 3对字符串和字节的严格区分:hashlib里的哈希函数(比如md5)只接受字节(bytes)类型的数据,但你从request.data['password']拿到的是Python的Unicode字符串,直接传给md5.update()自然会触发TypeError。

解决方法

只需要把字符串编码成字节就行,两种常用方式任你选:

方式一:直接在update时编码

修改你代码里的md5.update(passwd)这一行,指定编码格式(推荐用UTF-8,通用性最强):

user = Data()
passwd = request.data['password']
md5 = hashlib.md5()
md5.update(passwd.encode('utf-8'))  # 关键:把字符串转成字节
user.password = md5.hexdigest()
print(user.password)
user.save()

方式二:提前编码好字节对象

如果之后还要用到编码后的密码,也可以先转成bytes再传入:

user = Data()
passwd = request.data['password']
passwd_bytes = passwd.encode('utf-8')  # 先转成字节
md5 = hashlib.md5()
md5.update(passwd_bytes)
user.password = md5.hexdigest()
print(user.password)
user.save()

额外提醒

  • 编码格式一定要统一,别一会儿用UTF-8一会儿用GBK,不然不同环境下计算出的哈希值会不一样。
  • 另外,生产环境里不建议只用MD5存储密码,安全性太低,推荐用bcrypt、Argon2这类专门的密码哈希算法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:37:38