<p>你似乎对编码很困惑。。。在</p>
<ul>
<li><p><code># -*- coding: utf-8 -*-</code>仅适用于代码中的非ascii<strong>literal</strong>字符串。</p></li>
<li><p><code>file = file.decode("utf8")</code>将字符串<code>file</code>(最好命名为<code>filename</code>)从utf-8解码为unicode。这只适用于文件系统的编码(文件和文件夹名称)是utf-8(或者更确切地说,只要所有文件和文件夹的名称都可以解释为有效的utf-8)。当然,它对文件的内容没有多大作用。</p></li>
<li><p><code>codecs.open(file, "rb", encoding="utf8")</code>:只有当文件的内容实际上是一些utf-8编码的文本时,这才有意义,而且显然您正在读取任何类型的二进制数据,因此,如果出现虚假的编码错误,这一点也不奇怪。</p></li>
<li><p><code>buf.encode("ISO-8859-1")</code>:只是毫无用处,<code>hashlib.sha1()</code>可以很好地与utf-8配合使用。</p></li>
</ul>
<p>长话短说:<strong>你的“修复”没有一个是有意义的。在</p>
<p>回到问题的根源:</p>
<blockquote>
<p>IOError: [Errno 2] No such file or directory: file
It caused because not all the files name in english</p>
</blockquote>
<p>我真的认为你在这里假设的太多了-如果你从浏览文件系统得到了一个非ascii(不是“非英语”)文件名,那么你的文件系统<strong>应该</strong>支持这种非ascii编码(好吧,它是Windows,所以这里可能会发生一些特殊的事情,但我可以告诉你,我从来没有在Linux上遇到过这样的问题也不是MacOS)。最坏的情况下,如果您的“非英语”(非ascii)文件名是utf8,那么您可以尝试使用<strong>仅</strong>的<code>file = file.decode('utf-8')</code>来查看它是否工作得更好,但仍然是<a href="https://en.wikipedia.org/wiki/Programming_by_permutation" rel="nofollow">programming by accident</a>。在</p>
<p>实际上,由于您没有发布有效的回溯(使用完整的文件名),所以很难判断原始代码到底出了什么问题,所以您最好的选择当然是切换回第一个实现并仔细阅读完整的回溯。然后可以使用交互式pythonshell或<a href="https://docs.python.org/2/library/pdb.html" rel="nofollow">the step debugger</a>进一步检查问题。在</p>
<p>哦,是的:我假设您使用的是Python2.x-Python3处理编码的方式有点不同。在</p>