Как исправить ошибку кодирования Unicode с помощью модуля hashlib? - PullRequest
27 голосов
/ 13 июля 2011

После нескольких поисков я не смог определить, как избежать появления ошибки: «Unicode-объекты должны быть закодированы перед хэшированием» при использовании этого кода:

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

Как я могу пройти мимоошибка?Как вы кодируете Unicode-объекты?

1 Ответ

48 голосов
/ 13 июля 2011
pwdinput = input("Now enter a password:").encode('utf-8') # or whatever encoding you wish to use

Если вы используете Python 3, это преобразует строку Unicode, возвращаемую input(), в bytes объект, закодированный в UTF-8, или любую другую кодировку, которую вы хотите использовать.В предыдущих версиях 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

...