擅长:python、mysql、java
<p>显然<code>hashlib.sha1</code>不需要<code>unicode</code>对象,而是<code>str</code>对象中的字节序列。将<code>unicode</code>字符串编码为一个字节序列(例如,使用UTF-8编码)应该可以解决这个问题:</p>
<pre><code>>>> import hashlib
>>> s = u'é'
>>> hashlib.sha1(s.encode('utf-8'))
<sha1 HASH object @ 029576A0>
</code></pre>
<p>错误是因为它正在尝试使用默认的<code>ascii</code>编码自动将<code>str</code>对象转换为<code>unicode</code>对象,该编码无法处理所有这些非ASCII字符(因为字符串不是纯ASCII字符)。</p>
<p>学习更多关于Unicode和编码的一个好的起点是<a href="http://docs.python.org/howto/unicode.html" rel="noreferrer">Python docs</a>,而这个<a href="http://www.joelonsoftware.com/articles/Unicode.html" rel="noreferrer">article by Joel Spolsky</a>。</p>