美文网首页
利用Python读取文件时出现\ufeff的原因及解决办法

利用Python读取文件时出现\ufeff的原因及解决办法

作者: Walteverything | 来源:发表于2021-12-13 23:37 被阅读0次

    导入数据代码如下:

    open("XXX.csv","r",encoding="utf-8")

    数据开头显示如下:

    ['\ufeffclassify', 'name', 'comment', 'star', 'price', 'address', 'commentlist\n']

    可见出现“\ufeff”??

    原因分析

    utf-8编码的文件时开头会有一个多余的字符 \ufeff,在读文件时会读到 \ufeff

    解决办法

    只需改一下编码就行,把 utf-8 编码 改成 utf-8-sig 编码即可

    即 open("XXX.csv","r",encoding="utf-8-sig")

    改后数据显示如下:

    ['classify', 'name', 'comment', 'star', 'price', 'address', 'commentlist\n']

    \ufeff 原理分析

    字节顺序标记(英语:byte-order mark,BOM)是位于码点U+FEFF的统一码字符的名称。当以UTF-16或UTF-32来将UCS/统一码字符所组成的字符串编码时,这个字符被用来标示其字节序。它常被用来当做标示文件是以UTF-8、UTF-16或UTF-32编码的记号。

    在编写文本时保存时包含了BOM(Byte Order Mark,字节顺序标记,出现在文本文件头部,Unicode编码标准中用于标识文件是采用哪种格式的编码)导致最后输出了\ufeff。

    当建立.xslx文件后又另存为.csv文件(UTF-8编码),则utf-8编码的文件时开头会有一个多余的字符\ufeff,这是我们读取文件也按UTF-8编码就会输出\ufeff。当使用 utf-8-sig 编码,即可去除文件开头的\ufeff

    UTF-8以字节为编码单元,它的字节顺序在所有系统中都是一様的,没有字节序的问题,也因此它实际上并不需要BOM(“ByteOrder Mark”)。但是UTF-8 with BOM即utf-8-sig需要提供BOM。

    相关文章

      网友评论

          本文标题:利用Python读取文件时出现\ufeff的原因及解决办法

          本文链接:https://www.haomeiwen.com/subject/jszsfrtx.html