<p>出现UnicodeEncodeError是因为在打印时,Python将字符串编码为字节,但在本例中,使用的编码(ASCII)没有与“\xe9”匹配的字符,因此引发了错误。你知道吗</p>
<p>设置<a href="https://docs.python.org/3.5/using/cmdline.html#envvar-PYTHONIOENCODING" rel="nofollow noreferrer">PYTHONIOENCODING</a>环境变量将强制Python使用不同的编码—环境变量的值。UTF-8编码可以对任何字符进行编码,因此这样调用程序可以解决以下问题:</p>
<pre><code>PYTHONIOENCODING=UTF-8 python3 europarl_extractor.py
</code></pre>
<p>假设代码是这样的:</p>
<pre><code>import gzip
if __name__ == '__main__':
with gzip.open('europarl-v7.fr.gz', 'rb') as f_in:
bs = f_in.read()
txt = bs.decode('utf-8')
print(txt[:100])
</code></pre>
<p>环境变量可以通过其他方式设置-通过<code>export</code>语句、在<code>.bashrc</code>、<code>.profile</code>等中设置</p>
<p>一个有趣的问题是<em>为什么</em>Python试图将输出编码为ASCII。我假设在*nix系统上,Python基本上是查看<code>$LANG</code>环境变量来确定要使用的编码。但是在这种情况下,<code>$LANG</code>的值是<code>fr_FR.UTF-8</code>,而Python使用ASCII作为输出编码。你知道吗</p>
<p>通过查看<code>locale</code>模块的<a href="https://github.com/python/cpython/blob/3.5/Lib/locale.py" rel="nofollow noreferrer">source</a>和这个<a href="https://www.cl.cam.ac.uk/~mgk25/unicode.html#activate" rel="nofollow noreferrer">FAQ</a>,按顺序检查这些环境变量:</p>
<pre><code>'LC_ALL', 'LC_CTYPE', 'LANG', 'LANGUAGE'
</code></pre>
<p>因此,可能是<code>LC_ALL</code>或<code>LC_CTYPE</code>中的一个被设置为在您的环境中强制使用ASCII编码的值(您可以通过在终端中运行<code>locale</code>命令进行检查;同时运行<code>locale charmap</code>将告诉您编码本身)。你知道吗</p>