\ufeff的解决方法

\ufeff的解决方法

用"utf-8"编码方式读取带有BOM的文件时,它会把BOM当做是文件内容来处理, 也就会发生错误.

解决方法

str.encode('utf-8').decode('utf-8-sig')

实例

    with open("path.txt", "r", encoding="utf-8") as f:  # 第一步:打开文件
        text = f.readline()  # 第二步:读取文件
        print(text)
        print(type(text))
    text = text.encode('utf-8').decode('utf-8-sig')
    dddd = os.listdir(text)
    print(dddd)

问题产生的原因

UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明“我是UTF-8编码”

什么是BOM?

BOM = Byte Order Mark
BOM是Unicode规范中推荐的标记字节顺序的方法。
比如说对于UTF-16,如果接收者收到的BOM是FEFF,表明这个字节流是Big-Endian的;
如果收到FFFE,就表明这个字节流是Little-Endian的。
# conding=utf-8
f = open("news.txt", "r",encoding='utf-8')
file = f.read()
file_list = file.split(",")
print(file_list)

file_list2 = file.encode('utf-8').decode('utf-8-sig')
print(file_list2)
#打印结果如下
['\ufeff新华社北京2月8日电2月8日']
新华社北京28日电28

utf-8 与utf-8-sig的区别如下:

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值