Python 读取文件首行多了"\ufeff"字符串

python读取B.txt文件时,控制台打印首行正常,但是若是用首行内容打开文本的话,就会出现如下图,要打开的路径比预期A.txt多了一串字符"\ufeff", 显然无法正确打开文件.

    path = '/Users/wumeng/PycharmProjects/untitled'
    history = os.path.join(path, '2015Y1.csv')
    data = []
    with open(history,'r') as csvfile:
        datasource = csv.DictReader(csvfile)
        for row in datasource:
            print(row)

在这里插入图片描述
解决方案:
在读取2015Y1.csv 时,指定编码方式为 "utf-8-sig"即可 如下:

    path = '/Users/wumeng/PycharmProjects/untitled'
    history = os.path.join(path, '2015Y1.csv')
    data = []
    with open(history,'r',encoding='utf-8-sig') as csvfile:
        datasource = csv.DictReader(csvfile)
        for row in datasource:
            print(row)

首行出现的”\ufeff“叫BOM(“ByteOrder Mark”)用来声明该文件的编码信息.

”utf-8“ 是以字节为编码单元,它的字节顺序在所有系统中都是一样的,没有字节序问题,因此它不需要BOM,所以当用"utf-8"编码方式读取带有BOM的文件时,它会把BOM当做是文件内容来处理, 也就会发生类似上边的错误.

“uft-8-sig"中sig全拼为 signature 也就是"带有签名的utf-8”, 因此"utf-8-sig"读取带有BOM的"utf-8文件时"会把BOM单独处理,与文本内容隔离开,也是我们期望的结果.

摘要:问题描述:json.loads(text,encoding=‘utf8’)报UnexpectedUTF-8BOM(decodeusingutf-8-sig)错误,将encoding改为’utf-8-sig’仍然报错。原因分析:text包含BOM字符解决方案:将BOM头去掉
问题描述:
json.loads(text,encoding=‘utf8’) 报Unexpected UTF-8 BOM (decode using utf-8-sig)错误,将encoding改为’utf-8-sig’仍然报错。
原因分析:
text包含BOM字符
解决方案:
将BOM头去掉,代码如下:
if text.startswith(u’/ufeff’):
text = text.encode(‘utf8’)[3:].decode(‘utf8’)

文章部分来源:https://www.cnblogs.com/Allen-rg/p/10536081.html

Guess you like

Origin blog.csdn.net/Z1065701256/article/details/103400036