读取Zip文件计算SHA256校验和失败,报UnicodeDecodeError错误
问题解决:计算Zip文件SHA256校验和时的UnicodeDecodeError
问题根源
你用文本模式打开了Zip二进制文件,Python会自动尝试用系统默认字符编码(比如charmap)解码字节流,但Zip文件包含无法被该编码识别的字节,导致解码失败抛出UnicodeDecodeError。哈希校验需要处理原始二进制数据,不需要解码为字符串。
解决方案
打开文件时指定二进制读取模式('rb'),这样读取的是原始bytes对象,直接传入hashlib.sha256即可,不会触发解码操作。
修正后的代码
import hashlib with open(filename, 'rb') as f: data = f.read() hash_sha256 = hashlib.sha256(data).hexdigest()
大文件场景优化
如果Zip文件体积较大,一次性读取全部内容会占用过多内存,可以分块读取更新哈希:
import hashlib hash_sha256 = hashlib.sha256() with open(filename, 'rb') as f: # 每次读取4KB数据块更新哈希 for chunk in iter(lambda: f.read(4096), b''): hash_sha256.update(chunk) hash_sha256 = hash_sha256.hexdigest()
内容的提问来源于stack exchange,提问作者Willy
相关产品推荐
相关产品推荐

