如何解决使用hashlib模块的Unicode编码错误?

29 投票
1 回答
34742 浏览
提问于 2025-04-16 21:27

经过多次搜索,我还是没能找到解决办法,遇到了一个错误提示:“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

撰写回答