Python读取文件时获取到开头65279(BOM)字符的问题排查
问题分析与解决
核心原因
- 绝对不是Python添加的BOM,文件本身就包含UTF-8 BOM(U+FEFF)。VS Code显示编码为
UTF-8而非UTF-8 with BOM,是因为它会自动识别并隐藏BOM,不会将其作为可见内容展示,但文件字节流开头确实存在EF BB BF这三个BOM字节。 - 你用
head -c 1看到的是n,大概率是终端的处理导致:EF字节属于不可见字符,终端直接跳过不显示,你实际看到的是BOM之后的n;也有可能是你误输入成head -n 1(读取第一行内容),该命令会直接输出文本部分,自动跳过BOM。
Python避免读入BOM的方法
Python默认打开文件时不会自动处理UTF-8 BOM,因此会将其读为U+FEFF字符。可以通过以下两种方式解决:
- 使用
utf-8-sig编码打开文件,该编码会自动识别并跳过UTF-8 BOM:
first = open('/path_to_file/file', encoding='utf-8-sig').read(1)
- 手动检查并跳过BOM字符:如果已用默认编码打开文件,可判断第一个字符是否为U+FEFF,若是则重新读取下一个字符:
with open('/path_to_file/file') as f: first_char = f.read(1) if first_char == '\ufeff': first_char = f.read(1)
内容的提问来源于stack exchange,提问作者Big boy
相关产品推荐
相关产品推荐

