1. 报错
Python 读取文件时,出现报错:
unicodedecodeerror: 'utf-8' codec can't decode byte 0x8c
2. 原因
这个错误表明 Python 在尝试解码一个字节序列时发生了问题,通常是因为指定的编码格式无法正确解码字节序列中的某些字节。
这种情况通常发生在文件的实际编码格式与指定的编码格式不匹配时,例如文件是 gbk,而程序用 utf-8 的编码去读取;或者文件中包含无法被指定编码格式解析的特殊字节。
例如,下面程序中报错位置:
with open(unique_file_path, "r", encoding="utf-8") as f:
for line in f: # 这里就直接报错了
...
3. encoding 参数
在 Python 中,with open()
结构是一种常用的文件处理方式,它不仅可以更方便地管理文件对象的生命周期,还能够自动处理文件的关闭操作,以避免资源泄漏。
with open()
的 encoding
参数指定文件的编码格式。
3.1 编码格式
encoding,即编码格式,用于指定文件中字符的编码方式,它决定了如何将字符转换为字节序列以及如何从字节序列中解码出字符。常见的编码格式包括:
'utf-8'
:UTF-8 是一种可变长字符编码,支持全球范围内的字符。'utf-16'
:UTF-16 是一种固定或可变长的字符编码,支持 Unicode 字符集。'gbk'
、'gb2312'
:GBK 和 GB2312 是中文字符集编码,主要用于简体中文。'latin-1'
:Latin-1 是一种单字节编码,支持 ISO/IEC 8859-1 字符集。- …
3.2 注意事项
- 使用适当的编码格式很重要,否则可能导致文件读取时出现乱码或解码错误。
- 如果不确定文件的编码格式,可以尝试使用
'utf-8'
编码,因为 UTF-8 是一种通用的 Unicode 编码格式,支持大多数字符集。 - 在写入文件时,也应该使用相同的编码格式以确保数据的一致性。
4. 解决方法
如果更改 encoding="utf-8"
为 gbk
或者其他编码格式依然报错,那么一种兜底方案是跳过这一行。
# 增加 errors="ignore"
with open(unique_file_path, "r", encoding="utf-8", errors="ignore") as f:
for line in f:
# 防止抛错,建议用try-except去处理
try:
... # 这里写你的逻辑
except:
pass