我想从目前使用的库中获取字符串格式的值。
现在库返回一个以字节为单位的值,但是我想用字符串类型来获取它。所以我使用bytes.decode()来转换它,但它给出了错误,因为它无法解码某些字符。
我深入研究了图书馆的运作方式。原来它使用此方法提供哈希并返回值
hashlib.sha256(data).digest()
值的一个例子是
b'\xce\xe00-Y\x84M2\xbd\xca\x91\\\x82\x03\xddD\xb3?\xbb~\xdc\
然后我解码它并得到一个错误。
那么有什么方法可以将它转回字符串类型,或者我必须创建自己的哈希数据版本并使用hexdigest()代替。
** 已修改
给出错误的真实示例
b'\xce\xe00-Y\x84M2\xbd\xca\x91\\\x82\x03\xddD\xb3?\xbb~\xdc\x19\x05\x1e\xa3z\xbe\xdf(\xec\xd4r'
返回此错误
*** UnicodeDecodeError: 'utf-8' codec can't decode byte 0xce in position 0: invalid continuation byte
答案 0 :(得分:2)
如果值正如上所述返回摘要,
hashlib.sha256(data).digest()
然后得到这个的最大化, 您可以使用以下代码,
hex_digest = digest.encode('hex').decode()
示例:
digest = b'\xce\xe00-Y\x84M2\xbd\xca\x91\\\x82\x03\xddD\xb3?\xbb~\xdc'
hex_digest = digest.encode('hex').decode()
print(hex_digest)
u'cee0302d59844d32bdca915c8203dd44b33fbb7edc'
答案 1 :(得分:1)
您应该可以使用binacii.hexlify
:
import binascii
binary_string = b'\xce\xe00-Y\x84M2\xbd\xca\x91\\\x82\x03\xddD\xb3?\xbb~\xdc'
hex_string = binascii.hexlify(binary_string)
print(hex_string)
输出:
b'cee0302d59844d32bdca915c8203dd44b33fbb7edc'