我想将一个字节变量转换为字符串.当然,以前有一些与我有关的问题.但是,尝试以这种方式在md5()中散列文件的内容:
import hashlib with open("C:\\boot.ini","r") as f: r=f.read() a=hashlib.md5() a.update(r.encode('utf8')) bytes_data=a.digest() print(bytes_data) r=type(bytes_data) print(r) # <-- Just to be sure, it is in bytes myString=bytes_data.decode(encoding='UTF-8')
我收到了这个错误:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe3 in position 1: invalid continuation byte
由于这个问题,我理解我的问题的原因,但是我正在处理不同的文件来计算它们的哈希,所以我无法控制字节,那么我该如何解决这个问题呢?
该hash.digest()
返回值是不是一个UTF-8编码的字符串.不要试图解码它; 它是一个字节序列在0-255范围内和这些字节都没有表示文本.
并非所有bytes
内容都编码文本; 这是一个这样的价值.
hash.hexdigest()
如果您想要可打印的东西,请使用.此方法返回表示为十六进制数的字节(每个摘要字节两个十六进制字符).这是与其他人共享MD5摘要时常用的形式.