python – hashlib.md5()TypeError:Unicode对象必须在散列之前进行编码

我是新的编码,并遇到一个问题,试图编码一个字符串.

>>> import hashlib
>>> a = hashlib.md5()
>>> a.update('hi')
Traceback (most recent call last):
  File "<pyshell#22>",line 1,in <module>
    a.update('hi')
TypeError: Unicode-objects must be encoded before hashing
>>> a.digest()
b'\xd4\x1d\x8c\xd9\x8f\x00\xb2\x04\xe9\x80\t\x98\xec\xf8B~'

是(a)现在被认为是编码?

第二个问题:当我在脚本中运行相同的代码时,我得到这个错误:

import hashlib
a = hashlib.md5()
a.update('hi')
a.digest()

追溯(最近呼叫最后):
文件“C:/ Users / User / Desktop / Logger / Encoding practice.py”,第3行
a.update( ‘HI’)
TypeError:Unicode散列之前必须对Unicode对象进行编码

为什么代码在shell中工作而不是脚本?
我正在使用Windows和Python 3.4

谢谢.

解决方法

因为你编码简单的字符串,我推断你正在运行Python 3,其中所有的字符串都是unicode对象,你有两个选择:

>提供字符串的编码,例如:“没有人检查”.encode(‘utf-8’)
>使用二进制字符串,如手册中所示:

m.update(b"Nobody inspects")
m.update(b" the spammish repetition")

shell脚本中行为不同的原因是脚本停止在错误上,而在shell中,最后一行是单独的命令,但是由于上一个错误,仍然没有执行任何操作.

dawei

【声明】:丽水站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。