擅长:python、mysql、java
<p>有两种选择。</p>
<ol>
<li>指定打开文件时的编码,而不是使用默认值。在</li>
<li>以二进制模式打开文件,并显式地<code>decode</code>从<code>bytes</code>到{<cd3>}。在</li>
</ol>
<p>第一种显然更简单。您不会显示如何打开文件,但假设您的代码如下所示:</p>
<pre><code>with open(path) as file_obj:
for line in file_obj:
</code></pre>
<p>这样做:</p>
^{pr2}$
<p>就这样。</p>
<p>正如<a href="http://docs.python.org/3/library/functions.html#open" rel="nofollow">the docs</a>解释的那样,如果不在文本模式下指定编码:</p>
<blockquote>
<p>The default encoding is platform dependent (whatever <code>locale.getpreferredencoding()</code> returns), but any encoding supported by Python can be used.</p>
</blockquote>
<p>在某些情况下(例如,任何具有适当配置的OS X或linux),<code>locale.getpreferredencoding()</code>将始终是“UTF-8”。但很明显,它永远不会是“自动为我可能打开的任何文件选择合适的东西”。因此,如果知道一个文件是UTF-8,就应该显式地指定它。</p>