【问题标题】:Convert hash.digest() to unicode将 hash.digest() 转换为 unicode
【发布时间】:2011-09-09 14:26:48
【问题描述】:
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...

【问题讨论】:

    标签: python unicode unicode-string


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      Ignacio 刚刚给出了完美的答案。只是一个补充:当您将某些字符串从在 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。这是一个信号,表明你的意图不太正确。

      最后但同样重要的是,编码是非常令人困惑的东西。这个comprehensive text about them可以说清楚。

      【讨论】:

      • 为什么 unicode("órgão", "UTF-8") 在我的 Python 2.7 环境中不起作用?
      • @superche 也许您在终端中使用了另一种编码。 print repr("órgão") 在你的机器上的输出是什么?
      猜你喜欢
      • 2011-06-12
      • 2021-12-26
      • 2012-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-10
      • 1970-01-01
      相关资源
      最近更新 更多