You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python对比文本文件时出现charmap编码UnicodeDecodeError如何解决

报错诱因

这个错误是文本解码失败导致的,具体原因如下:

  • Windows系统下Python的open()函数默认使用系统本地编码(通常是GBK/CP1252这类字符映射编码)打开文本文件
  • 你要读取的txt文件是用UTF-8(或其他非系统默认编码)保存的,文件中包含了默认编码无法识别的字节序列(报错中提到的0x9d),导致解码抛出异常
  • 如果你要比对的文件本身是非文本类二进制文件,用文本模式读取本身就会触发解码错误
修复方案

可根据你的使用场景二选一:

场景1:确认两个文件都是文本文件

给open()函数显式指定文件对应的编码(最常见的是utf-8,如果你的文件是其他编码替换成对应值即可),修改后代码如下:

path = r"D:\Python_Course_with_Notes[1]\9. Chapter 9\ok.txt"
path2 = r"D:\Python_Course_with_Notes[1]\9. Chapter 9\this.txt"

# 显式指定编码为utf-8
with open(path, encoding='utf-8') as f:
    check = f.read()

with open(path2, encoding='utf-8') as f:
    to_check = f.read()

if check == to_check:
    print("Yes this file matches with another file")
else:
    print("No this file doesn't matches with another file")

如果指定utf-8后仍然报错,可以根据文件实际编码替换为gbk、utf-8-sig等适配值。

场景2:任意格式文件通用比对方案(更推荐,无编码问题)

直接用二进制模式读取文件内容,不需要解码为字符串,直接比对字节序列即可,既不会触发编码错误,也可以支持图片、压缩包等任意格式文件的一致性校验,修改后代码如下:

path = r"D:\Python_Course_with_Notes[1]\9. Chapter 9\ok.txt"
path2 = r"D:\Python_Course_with_Notes[1]\9. Chapter 9\this.txt"

# 用rb表示二进制只读模式打开
with open(path, 'rb') as f:
    check = f.read()

with open(path2, 'rb') as f:
    to_check = f.read()

if check == to_check:
    print("Yes this file matches with another file")
else:
    print("No this file doesn't matches with another file")

内容的提问来源于stack exchange,提问作者Pranshu2OP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 15:00:07