Vla*_*hev 47 python unicode utf-8
我尝试哈希一些unicode字符串:
hashlib.sha1(s).hexdigest()
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-81:
ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
在哪里s是这样的:
œΣ¡™£¢∞§•ªº-≠œΣ'®†¥¨øπ"'åß∂ƒ©˙Δ˚¬...æΩ≈ç√∫~μ≤≥÷åйцукенгшщзхъфывапролджэячсмитьбююю..юбьтијџўќ†њѓѕ" "«««\dzћ÷...•Δљl«єђxcvіƒm≤≥ї!@#$©^&*(()----------ΔΔΔΔΔΔΔΔΔΔΔΔΔ ΔΔΔΔΔΔ•...÷÷ћzdzћ...•ΔљlљΔ•...÷÷ћzћ...•ΔљΔ•...љΔ•...љΔ•...Δљ•...Δљ•...љΔ•...Δ• ...Δ•...Δ•Δ...•÷Δ•...÷Δ•...÷Δ•...÷Δ•...÷Δ•...÷Δ•...÷Δ•...
我应该修复什么?
Cam*_*ron 89
显然hashlib.sha1不期望一个unicode对象,而是一个对象中的字节序列str.将unicode字符串编码为字节序列(使用UTF-8编码)应修复它:
>>> import hashlib
>>> s = u'é'
>>> hashlib.sha1(s.encode('utf-8'))
<sha1 HASH object @ 029576A0>
Run Code Online (Sandbox Code Playgroud)
该错误是因为它尝试使用默认编码将unicode对象str自动转换为自动,该ascii编码无法处理所有非ASCII字符(因为您的字符串不是纯ASCII).
学习更多关于Unicode和编码的一个很好的起点是Python文档,以及Joel Spolsky撰写的这篇文章.
使用编码格式utf-8,试试这个简单的方法,
>>> import hashlib
>>> hashlib.sha256(str(random.getrandbits(256)).encode('utf-8')).hexdigest()
'cd183a211ed2434eac4f31b317c573c50e6c24e3a28b82ddcb0bf8bedf387a9f'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28381 次 |
| 最近记录: |