You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:38:36