Python 3.x 在Python 3中计算文件的md5hash

Python 3.x 在Python 3中计算文件的md5hash,python-3.x,Python 3.x,试图计算文件的mdhash,但在Python3中遇到问题。这段代码在Python 2中运行得非常好,但现在我得到了一个UnicodeDecodeError: ################### #0 Compute md5hash ################### try: with open(fname) as fo: md5 = hashlib.md5() chunk_sz = md5.block_size * 128 d

试图计算文件的mdhash,但在Python3中遇到问题。这段代码在Python 2中运行得非常好,但现在我得到了一个UnicodeDecodeError:

  ###################
  #0 Compute md5hash
  ###################
  try:
    with open(fname) as fo:
      md5 = hashlib.md5()
      chunk_sz = md5.block_size * 128
      data = fo.read(chunk_sz)
      while data:
        md5.update(data)
        data = fo.read(chunk_sz)
      md5hash = md5.hexdigest()
  except IOError:
    md5hash = None
引发的错误是:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 38: invalid start byte

您需要以二进制模式打开文件:

with open(fname, 'rb') as fo:
Python3使用默认编码(在您的系统上是UTF-8)自动解码以文本模式打开的文件