Python 读取UTF-8-BOM 文件

本文介绍如何在Python中正确处理带有BOM(字节顺序标记)的UTF-8编码文件,避免因BOM导致的空白字符或乱码问题。文中提供了一个简单的示例,展示了使用正确的编码方式来读取此类文件的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类似WINDOWS自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM)。它是一串隐藏的字符,用于让记事本等编辑器识别这个文件是否以UTF-8编码。在linux平台处理windows上创建的文件时,要注意编码是否是带有bom。

记得在使用php是读取UTF-8 bom格式的文件时出现过乱码的情况,今天使用python读取windows上的一个文件时出现了开头字符是空白的情况,打开文件肉眼却看不到空格有,查看编码格式原来是utf-8-bom格式。

在python下读取带bom的utf-8格式的文件可以用encoding='utf_8_sig'   : 

with open('filename.txt', 'r', encoding='utf_8_sig') as fp:
	print(fp.read())
### Python 中以 UTF-8 编码读取文件并忽略换行符 在 Python 中,通过 `open()` 函数可以指定文件的编码格式为 UTF-8读取其内容。为了满足不使用换行符的要求,可以在读取整个文件后移除所有的换行符 `\n`。以下是具体实现方法: #### 方法一:一次性读取全部内容 利用 `read()` 方法将文件作为一个整体加载到内存中,并调用字符串的 `.replace('\n', '')` 方法来删除所有换行符。 ```python with open("example.txt", 'r', encoding='utf-8') as file: content = file.read().replace('\n', '') ``` 这种方法适用于较小规模的文件,因为它会把整份文档载入内存[^5]。 #### 方法二:逐行读取再拼接去除换行符 对于较大的文件,推荐按照行逐步处理,从而减少单次操作占用过多资源的风险。每读取一行之后立即去掉结尾可能存在的换行标志位然后再累积起来形成最终的结果串。 ```python content_parts = [] with open("example.txt", 'r', encoding='utf-8') as file: for line in file: stripped_line = line.rstrip('\n') content_parts.append(stripped_line) content = ''.join(content_parts) ``` 此策略不仅能够有效管理大型数据集而且还能灵活调整逻辑适应更复杂的场景需求[^4]。 #### 关于 BOM 的注意事项 当遇到带有 BOM(Byte Order Mark)标记的 UTF-8 文件(`UTF-8-SIG`)时,可能会触发类似于 `"Unexpected UTF-8 BOM"` 这样的异常提示。这是因为默认情况下 JSON 解析器期望纯粹形式的标准 UTF-8 流而非附加额外信息版本。因此建议先确认目标资料确实属于哪种类别后再决定采取相应措施加以应对。如果确定是因BOM引起的问题,则可尝试切换至 `'utf-8-sig'` 参数重新执行上述过程[^1]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值