Следующий фрагмент кода правильно вычисляет шестнадцатеричный код большинства файлов.Однако в некоторых файлах могут присутствовать символы, отличные от Юникода, что приводит к сбою этого кода.
def calculate_checksum(filename):
sha256_hash = hashlib.sha256()
with open(filename, "rb") as f:
# Read and update hash string value in blocks of 4K
for byte_block in iter(lambda: f.read(4096), b""):
sha256_hash.update(byte_block)
return sha256_hash.hexdigest()
Ошибка:
'utf8' codec can't decode byte 0xa3 in position 87: invalid start byte
Кажется, что Hashlib хочет преобразовать переменную byte_block в строку Unicode.Можно ли просто работать с байтами?