2011-07-13 3 views
22

をされていないhashlibモジュールを使用してUnicodeエンコードエラーを修正する方法はありますか?このコードを使用する場合、「ユニコード・オブジェクトはハッシュ前にエンコードする必要があります」:複数の検索後、私はというエラーを回避する方法を決定することができ

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

は、どのように私はそのエラーを乗り越えることができますか? Unicodeオブジェクトをどのようにエンコードしますか?

答えて

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

あなたは、Python 3使用していると仮定すると、これはbytes UTF-8でエンコードされたオブジェクト、または任意のエンコーディング使用したいにinput()によって返されたUnicode文字列を変換します。 Python 3はUnicode文字列(str)と表現できないかもしれないバイトの不変なシーケンスの間に明白な違いがありますが、以前のバージョンのPythonでも同様ですが、Unicode文字列と非Unicode文字列の処理はちょっと面倒でした。 ASCII文字(bytes)。

http://docs.python.org/library/stdtypes.html#str.encode
http://docs.python.org/py3k/library/stdtypes.html#str.encode

+0

ありがとうございました!それは完璧に働いた!私はそれがより早く実現したと思う。しかし、ありがとう。 – Nate

+0

あなたは大歓迎です。 – JAB

+7

私はPython 2.xのユニコード処理の大ファンではありませんが、この特定のコードはPython 2.7でもうまく機能します。なぜなら、 'str'と' unicode'型の両方にencodeメソッドがあり、文字列ASCII文字のみで構成されている場合、文字列のutf-8エンコーディングは、それらの文字のバイト文字列とまったく同じです。 「abc」と「abc」のハッシュを同じにしたい場合は、そのことが重要です。違う扱いを受けている人は大丈夫ですが、エンコーディングは問題ありません。 – GrandOpener

関連する問題