如何解决使用hashlib模块的Unicode编码错误?
经过多次搜索,我还是没能找到解决办法,遇到了一个错误提示:“Unicode对象在哈希之前必须被编码”。这个错误出现在我使用的代码中:
pwdinput = input("Now enter a password:")
pwd = hashlib.sha1()
pwd.update(pwdinput)
pwd = pwd.hexdigest()
我该如何解决这个错误呢?怎么才能对Unicode对象进行编码呢?
1 个回答
51
pwdinput = input("Now enter a password:").encode('utf-8') # or whatever encoding you wish to use
假设你在使用Python 3,这段代码会把通过input()
得到的Unicode字符串转换成一个用UTF-8编码的bytes
对象,或者你想用的其他编码方式。以前的Python版本也有这个功能,但它们处理Unicode和非Unicode字符串的方式有点混乱。而Python 3清楚地区分了Unicode字符串(str
)和可能代表ASCII字符的不可变字节序列(bytes
)。
http://docs.python.org/library/stdtypes.html#str.encode
http://docs.python.org/py3k/library/stdtypes.html#str.encode