在多次搜索后,我仍无法确定如何避免使用此代码时出现错误:"Unicode-objects must be encoded before hashing"。
pwdinput = input("Now enter a password:")
pwd = hashlib.sha1()
pwd.update(pwdinput)
pwd = pwd.hexdigest()
我该如何避免那个错误?你如何对Unicode对象进行编码?
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
str
和unicode
类型都有encode
方法,并且只要一个字符串只包含 ASCII 字符,那么该字符串的 utf-8 编码就等于这些字符的字节串。如果你想让 "abc" 和 u"abc" 的哈希值相同,则这个事实非常重要。如果你不介意将它们视为不同的内容,则任何编码方式都可以。 - GrandOpener