14
import hashlib
string1 = u'test'
hashstring = hashlib.md5()
hashstring.update(string1)
string2 = hashstring.digest()

unicode(string2)

UnicodeDecodeError: 'ascii' codec can't decode byte 0x8f in position 1: ordinal
not in range(128)

字符串必须是 unicode 才能对我有用,可以这样做吗?如果有帮助,请使用 python 2.7...

4

2 回答 2

21

伊格纳西奥刚刚给出了完美的答案。只是一个补充:当您将某些字符串从在 ASCII 中找不到字符的编码转换为 unicode 时,您必须将编码作为参数传递:

>>> unicode("órgão")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)
>>> unicode("órgão", "UTF-8")
u'\xf3rg\xe3o'

如果您不能说出原始编码是什么(在我的示例中为 UTF-8),那么您真的无法转换为 Unicode。这是一个信号,表明您的意图并不完全正确。

最后但并非最不重要的一点是,编码是非常令人困惑的东西。这篇关于他们的综合性文字可以使他们清楚。

于 2011-06-06T21:27:21.140 回答
13

的结果.digest()是一个字节串¹,因此将其转换为 Unicode 是没有意义的。.hexdigest()如果您想要一个可读的表示,请使用。

¹ 某些字节串可以转换为 Unicode,但返回的字节串.digest()不包含文本数据。它们可以包含任何字节,包括空字节:如果不使用转义序列,它们通常是不可打印的。

于 2011-06-06T20:33:00.247 回答