29

经过多次搜索后,我无法确定如何避免使用此代码时出现错误说明:“Unicode 对象必须在散列之前进行编码”:

    pwdinput = input("Now enter a password:")
    pwd = hashlib.sha1()
    pwd.update(pwdinput)
    pwd = pwd.hexdigest()

我怎样才能克服这个错误?你如何编码 Unicode 对象?

4

1 回答 1

51
pwdinput = input("Now enter a password:").encode('utf-8') # or whatever encoding you wish to use

假设您使用的是 Python 3,这会将返回的 Unicode 字符串转换为以 UTF-8 编码input()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

于 2011-07-13T17:49:45.633 回答