我尝试散列一些unicode字符串:
hashlib.sha1(s).hexdigest()
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-81:
ordinal not in range(128)
其中s
类似于:
œ∑¡™£¢∞§¶•ªº–≠œ∑´®†¥¨ˆøπ“‘åß∂ƒ©˙∆˚¬…æΩ≈ç√∫˜µ≤≥÷åйцукенгшщзхъфывапролджэячсмитьбююю..юбьтијџўќ†њѓѕ'‘“«««\dzћ÷…•∆љl«єђxcvіƒm≤≥ї!@#$©^&*(()––––––––––∆∆∆∆∆∆∆∆∆∆∆∆∆∆∆∆∆∆∆•…÷ћzdzћ÷…•∆љlљ∆•…÷ћzћ÷…•∆љ∆•…љ∆•…љ∆•…∆љ•…∆љ•…љ∆•…∆•…∆•…∆•∆…•÷∆•…÷∆•…÷∆•…÷∆•…÷∆•…÷∆•…÷∆•…
我该怎么办?
你散列
bytes
,而不是strings
。所以你必须知道你真正想要散列的字节,例如字符串的utf8内存表示或字符串的utf16内存表示,等等使用编码格式
utf-8
,试试这个简单的方法显然
hashlib.sha1
不需要unicode
对象,而是str
对象中的字节序列。将unicode
字符串编码为一个字节序列(例如,使用UTF-8编码)应该可以解决这个问题:错误是因为它正在尝试使用默认的
ascii
编码自动将str
对象转换为unicode
对象,该编码无法处理所有这些非ASCII字符(因为字符串不是纯ASCII字符)。学习更多关于Unicode和编码的一个好的起点是Python docs,而这个article by Joel Spolsky。
相关问题 更多 >
编程相关推荐