我正在尝试下载经过BVLC训练的模型,但我遇到了这个错误
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 110: invalid start byte
我想是因为下面的函数(complete code)
# 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
知道怎么解决吗?
您没有指定以二进制模式打开该文件,因此
f.read()
正在尝试将该文件读取为UTF-8编码的文本文件,这似乎不起作用。但由于我们采用的是字节的散列,而不是字符串的散列,所以编码是什么,甚至文件是不是文本都无关紧要:只需打开它,然后将其作为二进制文件读取。但是
打开的文件不是UTF-8编码的,而系统的默认编码设置为UTF-8。
因为您正在计算SHA1散列,所以应该改为将数据读取为binary。
hashlib
函数要求传入字节:注意在文件模式中添加了
b
。请参见^{} documentation :
从^{} module documentation :
由于文档和src代码中没有任何提示,我不知道为什么,但是使用b字符(我猜是二进制的)完全可以(tf版本:1.1.0):
For more information, check out: gfile
相关问题 更多 >
编程相关推荐