Python 字符串转列表时出现 \ufeff 字符的解决方法

Felix
Felix
发布时间:2026-10-10| 2人浏览过
原创

在 Python 中将包含 UTF-8 BOM 的文件内容转换为列表时,首个元素常出现不可见的 \ufeff 字符。本文通过读取文件、分割字符串并展示问题,随后介绍使用 `encode('utf-8').decode('utf-8-sig')` 方法去除 BOM 的正确操作,确保数据清洗的准确性。

问题背景

当使用 Python 读取带有 UTF-8 BOM(Byte Order Mark)编码的文件,并将其内容按分隔符转换为列表时,往往会在列表的第一个元素前发现一个不可见的 \ufeff 字符。这通常是因为文件编辑器在保存时自动添加了 BOM 标记,而 Python 默认的 utf-8 编码不会自动处理这一标记。

复现问题

假设我们有一个名为 lock_info.txt 的文件,其内容仅包含一行文本:lisi。如果我们使用标准的 utf-8 编码读取该文件,并按逗号分割字符串,将会得到如下结果:

#文件内容 lisi
lock = open("lock_info.txt", "r+",encoding="utf-8")
lock_line = lock.readline()
lock_list = lock_line.split(",")
print(lock_list)

#打印结果如下
['\ufefflisi']

从打印结果可以看出,列表中的第一个元素不再是纯净的 lisi,而是以 \ufeff 开头。这会导致后续的数据处理、匹配或计算出现意外错误。

解决方法

要解决这个问题,核心思路是将字符串先编码为字节流,再以 utf-8-sig 格式解码。这种编码方式会自动识别并移除 UTF-8 BOM 标记。

具体操作如下:

  1. 使用 encode('utf-8') 将字符串转换为字节对象。
  2. 使用 decode('utf-8-sig') 将字节对象解码为字符串,同时去除 BOM。
y = lock_line.encode('utf-8').decode('utf-8-sig')
print(y)

#打印结果如下
lisi

经过上述处理后,输出的字符串 y 即为纯净的 lisi,不再包含任何不可见的控制字符。这种方法简单有效,适用于处理大多数由 Windows 记事本等编辑器生成的带有 BOM 的 UTF-8 文件。

总结

在处理文件数据时,遇到 \ufeff 字符是 UTF-8 BOM 导致的常见现象。通过掌握 encode('utf-8').decode('utf-8-sig') 这一技巧,可以高效地清洗数据,确保程序运行的准确性。以上就是 Python 字符串转列表出现 \ufeff 字符的解决方法的全部内容,更多关于 Python 编码处理与数据清洗的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。