问题背景:
python读取tongyici.txt文件时,控制台打印首行正常,但是在将第一个单词传入求近义词的时候,就会报错:
也就是tongyici.txt文件第一个单词‘金融债务’莫名的多了一个 \ufeff 前缀,怎么去掉这个前缀呢?
解决方案:
在读取tongyici.txt文件 时,指定编码方式由utf-8改为 "utf-8-sig"即可 如下:
#批量找近义词
words = [line.rstrip()for line in open('tongyici.txt','r',encoding='utf-8-sig')]
原因:
首行出现的”\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单独处理,与文本内容隔离开,也是我们期望的结果.