面试题答案
一键面试常见导致UnicodeDecodeError
的场景
-
文件实际编码与指定编码不一致:
- 如文件是GBK编码,但代码指定
encoding='utf - 8'
。 - 解决方法:通过查看文件属性(有些编辑器可直接查看编码格式),或使用一些工具猜测编码,如
chardet
库。确定正确编码后,将open()
函数的encoding
参数设置为正确编码,例如open('file.txt', encoding='GBK')
。
- 如文件是GBK编码,但代码指定
-
文件无BOM(字节顺序标记)但误设带BOM编码:
- 比如文件实际是普通UTF - 8编码(无BOM),但设置
encoding='utf - 8 - sig'
(带BOM的UTF - 8编码)。 - 解决方法:将
encoding
参数改为'utf - 8'
。若文件实际是带BOM的UTF - 8编码,而代码未指定'utf - 8 - sig'
,则加上'utf - 8 - sig'
。
- 比如文件实际是普通UTF - 8编码(无BOM),但设置
-
文件编码不标准或损坏:
- 例如文件在传输过程中部分数据丢失或损坏,导致编码结构不完整。
- 解决方法:尝试恢复文件数据,如从备份中获取。若无法恢复,可尝试使用不同编码或编码修复工具进行处理,但不一定能完全恢复数据。
-
二进制文件按文本模式读取:
- 像图片、音频等二进制文件,使用
open()
按文本模式读取(如open('image.jpg', 'r')
)。 - 解决方法:按二进制模式读取,即
open('image.jpg', 'rb')
,并且不设置encoding
参数,因为二进制文件没有文本编码概念。
- 像图片、音频等二进制文件,使用