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

如何解决二进制模式不接受encoding参数的问题

解决“binary mode doesn't take an encoding argument”报错

嘿,这个坑我踩过!其实原因特别直白:二进制模式和编码参数是互斥的。让我给你掰扯清楚:

为什么会报错?

当你用二进制模式('rb'读、'wb'写)打开文件时,Python直接操作的是原始字节流,不需要做字符串和字节之间的编码/解码转换。而encoding参数是给文本模式('r'/'w'/'a')用的,用来告诉Python怎么把字节转换成字符串(读时)或者把字符串转成字节(写时)。你同时加了二进制模式和encoding,Python自然就懵了,给你抛出这个错误。

两种解决方案,看你需求选:

1. 我确实要处理二进制文件(图片、视频、压缩包等)

直接删掉encoding参数就行,读写都用字节类型:

# 错误写法(会报错)
# with open('image.png', 'rb', encoding='utf-8') as f:

# 正确写法
with open('image.png', 'rb') as f:
    byte_data = f.read()  # 得到bytes类型的原始数据

# 写二进制文件同理,要传入bytes对象
with open('new_image.png', 'wb') as f:
    f.write(byte_data)

2. 我其实是要处理文本文件,不小心用了二进制模式

把文件模式改成文本模式(去掉b),保留encoding参数,这样读写的就是字符串:

# 错误写法(会报错)
# with open('article.txt', 'rb', encoding='utf-8') as f:

# 正确写法
with open('article.txt', 'r', encoding='utf-8') as f:
    text_content = f.read()  # 得到str类型的文本

# 写文本文件,直接传字符串就行
with open('new_article.txt', 'w', encoding='utf-8') as f:
    f.write(text_content)

小提醒

别搞混两种模式的使用场景:

  • 非文本文件(二进制资源):必须用rb/wb,不用编码
  • 文本文件:用r/w加正确的编码(比如utf-8),避免乱码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:37:49