我是新的编码,并遇到一个问题,试图编码一个字符串.
>>> 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中,最后一行是单独的命令,但是由于上一个错误,仍然没有执行任何操作.