我正在尝试下载BVLC训练的模型,但我被卡在这个错误中
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 110: invalid start byte
我认为是由于以下功能(完整代码)
# Closure-d function for checking SHA1.
def model_checks_out(filename=model_filename, sha1=frontmatter['sha1']):
with open(filename, 'r') as f:
return hashlib.sha1(f.read()).hexdigest() == sha1
任何想法如何解决这个问题?
您正在打开的文件未经UTF-8编码,而系统的默认编码设置为UTF-8。
由于您正在计算SHA1哈希,因此应改为以二进制形式读取数据。这些hashlib
函数要求您以字节为单位传递:
with open(filename, 'rb') as f:
return hashlib.sha1(f.read()).hexdigest() == sha1
请注意b
在文件模式下的添加。
请参阅open()
文档:
mode是一个可选字符串,用于指定打开文件的模式。默认为
'r'
打开,表示可以在文本模式下阅读。[...]在文本模式下,如果编码未指定使用的编码是与平台相关的:locale.getpreferredencoding(False)
被称为获取当前的本地编码。(要读取和写入原始字节,请使用二进制模式,并保留未指定的编码。)
并从hashlib
模块文档中:
现在,您可以使用update()方法为该对象提供类似字节的对象(通常为字节)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句