Python读取文本文件时为何出现前置字符?
解决读取文本时出现
\ufeff字符的问题 嘿,这个问题我太熟悉了!你看到的\ufeff其实是UTF-8 BOM(字节顺序标记),这是Windows系统下部分文本编辑器(比如自带的记事本)默认保存UTF-8格式文件时,会自动添加的一个特殊标记。
问题成因
当你用Python默认的open()函数读取文件时,它的默认编码在Windows环境下不会自动识别并忽略这个BOM标记,所以就把它当成了普通的文本字符读出来,导致内容前多了这个奇怪的符号。从你的REPL记录里也能看到,文件的编码是cp65001(也就是UTF-8),但这个编码本身不处理BOM。
解决办法
有两种思路可以搞定这个问题:
1. 读取时指定能识别BOM的编码
直接在open()函数里指定encoding="utf-8-sig",这个编码会自动跳过UTF-8文件开头的BOM标记:
with open("text.txt", encoding="utf-8-sig") as f: content = f.read() print(content) # 输出就是干净的'1234'
2. 保存文件时避免生成BOM
如果是你自己保存的文件,保存时明确指定编码为utf-8(不带BOM的标准格式),这样后续读取就不会有这个问题了:
with open("text.txt", "w", encoding="utf-8") as f: f.write("1234")
说白了就是Windows记事本这类工具在保存UTF-8文件时的“小特性”搞的鬼,用utf-8-sig编码读取就能完美解决~
内容的提问来源于stack exchange,提问作者user12188239
相关产品推荐
相关产品推荐

