MST

星途 面试题库

面试题:Python中读取文件时常见的编码错误及解决方法

在Python中使用`open()`函数读取文件时,如果编码设置不正确,可能会遇到`UnicodeDecodeError`。请描述几种常见导致该错误的场景,并说明如何解决。例如,在读取一个GBK编码的文件,但代码中设置为`encoding='utf - 8'`的情况。
17.1万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

常见导致UnicodeDecodeError的场景

  1. 文件实际编码与指定编码不一致

    • 如文件是GBK编码,但代码指定encoding='utf - 8'
    • 解决方法:通过查看文件属性(有些编辑器可直接查看编码格式),或使用一些工具猜测编码,如chardet库。确定正确编码后,将open()函数的encoding参数设置为正确编码,例如open('file.txt', encoding='GBK')
  2. 文件无BOM(字节顺序标记)但误设带BOM编码

    • 比如文件实际是普通UTF - 8编码(无BOM),但设置encoding='utf - 8 - sig'(带BOM的UTF - 8编码)。
    • 解决方法:将encoding参数改为'utf - 8'。若文件实际是带BOM的UTF - 8编码,而代码未指定'utf - 8 - sig',则加上'utf - 8 - sig'
  3. 文件编码不标准或损坏

    • 例如文件在传输过程中部分数据丢失或损坏,导致编码结构不完整。
    • 解决方法:尝试恢复文件数据,如从备份中获取。若无法恢复,可尝试使用不同编码或编码修复工具进行处理,但不一定能完全恢复数据。
  4. 二进制文件按文本模式读取

    • 像图片、音频等二进制文件,使用open()按文本模式读取(如open('image.jpg', 'r'))。
    • 解决方法:按二进制模式读取,即open('image.jpg', 'rb'),并且不设置encoding参数,因为二进制文件没有文本编码概念。