擅长:python、mysql、java
<p>首先,修复方法:在读取文件时指定<code>encoding='UTF-8-sig'</code></p>
<p>现在,解释是:</p>
<p><code>\ufeff</code>是Unicode<a href="https://en.wikipedia.org/wiki/Byte_order_mark" rel="nofollow noreferrer">BOM (Byte Order Mark) character</a>。每当一个工具用BOM写入文件,而另一个工具使用显式编码(如<code>UTF-16-LE</code>)而不是BOM切换版本(如<code>UTF-16</code>)读取文件时,BOM将被视为普通字符,因此<code>\ufeff</code>将显示在字符串中。在microsoftland之外,这个特定的问题(将UTF-16理解为UTF-16-LE)是这个问题最常见的版本</p>
<p>但是,如果其中一个工具来自Microsoft,则更常见的是UTF-8。Unicode标准建议永远不要将BOM与UTF-8一起使用(因为字节不需要字节顺序标记),但并不完全禁止,因此许多Microsoft工具一直在这样做。然后其他所有工具,包括Python(和Pandas)只将其读取为UTF-8,没有BOM,导致额外的<code>\ufeff</code>出现(旧的、非Unicode友好的工具将读取与<code>\xef\xbb\xbf</code>类似的三个字节,您可能已经见过几次了。)</p>
<p>但是,虽然Python(和Pandas)默认为UTF-8,但它确实允许您手动指定编码,并且它附带的一种编码称为<code>UTF-8-sig</code>,这意味着UTF-8一开始就有一个无用的BOM</p>