擅长:python、mysql、java
<blockquote>
<p>So in my code to reproduce I changed '\xf6' to '\xc3\xb6', and the failure still occurs</p>
</blockquote>
<p>不在第一行它不:</p>
<pre><code>>>> 'w\xc3\xb6rner'.decode('utf-8')
u'w\xf6rner'
</code></pre>
<p>第二行将出错,尽管:</p>
<pre><code>>>> file.write('Name: %s - %s\n' %(Name, type(Name)))
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 7: ordinal not in range(128)
</code></pre>
<p>这完全是您所期望的,尝试将非ASCII Unicode字符写入字节流。如果使用Jiri建议的编解码器包装流,则可以直接编写Unicode,否则必须手动将Unicode字符串重新编码为字节。</p>
<p>更好的做法是,出于日志记录的目的,只需输出变量的repr()。那么您就不必担心Unicode字符、换行符或其他不需要的字符:</p>
<pre><code>name= 'w\xc3\xb6rner'.decode('utf-8')
file.write('Name: %r\n' % name)
Name: u'w\xf6rner'
</code></pre>