<p>您的代码有几个<em>问题,尽管主要原因是您的<code>for</code>循环没有修改<code>xstring</code>的内容:</p>
<p>我将在这里解决您代码中的所有问题:</p>
<p>您不能用单个<code>\</code>编写这样的路径,因为<code>\t</code>将被解释为制表符,<code>\f</code>将被解释为换行符。你必须加倍。我知道这是一个例子,但这样的混淆经常出现:</p>
<pre><code>with open('path\\to\\file.txt', 'r') as infile:
xstring = infile.readlines()
</code></pre>
<p>下面的<code>infile.close</code>行是<em>错误的</em>。它不调用close方法,实际上不执行任何操作。此外,您的文件<em>已经被with子句关闭了,如果您在任何地方的任何答案中看到这一行,请直接否决该答案,并评论说<code>file.close</code>是错误的,应该是<code>file.close()</code>。在</p>
<p>下面的方法应该可以工作,但是需要注意的是,它将每个非ascii字符替换为<code>' '</code>,这将破坏诸如naiveve和café之类的单词</p>
^{pr2}$
<p>但以下是您的代码因unicode异常而失败的原因:您根本没有修改<code>xstring</code>的元素,也就是说,您正在计算删除了ascii字符的行,但这是一个新值,从未存储到列表中:</p>
<p><s/></p>
<pre><code>for i, line in enumerate(xstring):
line = remove_non_ascii(line)
</code></pre>
<p/>
<p>相反,它应该是:</p>
<pre><code>for i, line in enumerate(xstring):
xstring[i] = remove_non_ascii(line)
</code></pre>
<p>或者我最喜欢的Python:</p>
<pre><code>xstring = [ remove_non_ascii(line) for line in xstring ]
</code></pre>
<hr/>
<p>虽然这些Unicode错误的发生主要是因为您使用的是Python2.7来处理纯Unicode文本,而最近的Python3版本在这方面遥遥领先,因此我建议您,如果您刚开始执行任务,请尽快升级到Python3.4+。在</p>