python处理包含bom的utf-8格式文件
2020-04-06 本文已影响0人
非鱼2018
工作需要,需要解析个jsom文件,用的过程中突然遇到这种错误,自己看了半天没有头绪,百度了下,
包含bom的utf8格式是指:的文件时开头会有一个多余的字符\ufeff,它叫BOM,是用来声明编码等信息的,但python会把它当作文本解析。
直接使用utf8编码解析会报错如下
file=open('data.txt',encoding='utf')
content=file.read()
data = json.loads(content)
BOM_error.PNG
j解决方法
1.直接使用encoding='utf_8_sig'处理带有包含bom的utf-8
file=open('data.txt',encoding='utf_8_sig')
content=file.read()
2.如果包含\ufeff则把该字符过滤掉
if content.startswith(u'\ufeff'):
content = content.encode('utf8')[3:].decode('utf8')
3.想起来chardet库可以自动解析文件编码格式,直接检测算了
import chardet #第三方库,需要先安装
with open('data.txt', 'rb') as f:
data = f.read()
code_type = chardet.detect(data)['encoding']
f = open('data.txt', encoding=code_type)
content = f.read()
data = json.loads(content)
print(data)
print(type(data))