Python3中UTF-8文件行首额外空白无法用strip()去除的解决办法
解决UTF-8文件读取时出现额外空白的问题
这问题我之前也碰到过,大概率是**UTF-8字节顺序标记(BOM)**在搞鬼!
问题原因
当你用Windows下的编辑器(比如记事本,或者默认设置的UltraEdit)保存UTF-8编码文件时,会自动在文件开头添加一个隐藏的BOM字符(U+FEFF)。Python默认的utf-8编码读取时不会忽略这个标记,会把它当成文件内容的一部分,所以原本"1234"(长度4)读出来就变成了5个字符,那个额外的空白就是BOM字符。而ANSI编码本身没有BOM机制,所以不会出现这个问题。
解决方案
方案1:使用utf-8-sig编码读取
Python提供了专门处理带BOM的UTF-8文件的编码utf-8-sig,它会自动识别并去除开头的BOM标记。修改你的代码如下:
with open('test2.txt', 'r', encoding="utf-8-sig") as f: for line in f.readlines(): line = line.strip() print("len: ", len(line)) print(line[0]) print(line[1])
方案2:手动去除BOM字符
如果你不想修改编码参数,也可以读取内容后手动检查并移除开头的BOM:
with open('test2.txt', 'r', encoding="utf-8") as f: content = f.read() # 检查是否以BOM开头,若是则移除 if content.startswith('\ufeff'): content = content[1:] for line in content.splitlines(): line = line.strip() print("len: ", len(line)) print(line[0]) print(line[1])
另外,你也可以调整UltraEdit的保存设置:在保存文件时,选择"UTF-8 (无BOM)"编码,这样生成的文件就不会有额外的BOM字符,用默认的utf-8编码读取也不会有问题。
内容的提问来源于stack exchange,提问作者Sikai Yao
相关产品推荐
相关产品推荐

