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

Python读取含字符串与字节的文件时解码错误,求原样读取方法

解决混合字符串与字节文件的读取问题

嘿,这个场景我太熟了!当文件里同时混着可读文本和原始字节数据时,用Python默认的文本模式读取肯定会触发解码错误——因为它会强制把所有内容都当成Unicode字符串来解析,碰到编码表中没有对应字符的字节就直接崩溃。针对你的问题,这里有两个实用的解决方案:

方案1:二进制模式读取(推荐)

直接以二进制模式打开文件,这样就能原样获取文件的所有原始字节,完全跳过自动解码的步骤,从根源上避免UnicodeDecodeError。

示例代码:

# 用"rb"模式打开文件(r=读取,b=二进制)
with open("your_file_path", "rb") as f:
    raw_content = f.read()

拿到raw_content(一个bytes对象)后,你可以自己控制后续的处理逻辑:

  • 如果你要按照"0xFD"分割,记得用字节串b"0xFD"作为分隔符:
    for segment in raw_content.split(b"0xFD"):
        # 根据需求处理每个片段:
        # 尝试解码成字符串(如果片段是文本)
        try:
            text = segment.decode("utf-8")
            print(f"文本片段:{text}")
        # 解码失败则保留原始字节(如果片段是二进制数据)
        except UnicodeDecodeError:
            print(f"原始字节片段:{segment}")
    

这种方式完全保留了文件的原始内容,让你灵活处理文本和字节混合的场景。

方案2:文本模式下忽略解码错误(适合仅关注文本内容)

如果你主要关心文件中的文本部分,对无法解码的字节可以容忍丢失或替换,可以在打开文件时指定errors参数:

  • errors="ignore":直接跳过无法解码的字节
  • errors="replace":把无法解码的字节替换成�符号

示例代码:

# 忽略解码错误,读取文本内容
with open("your_file_path", "r", encoding="utf-8", errors="ignore") as f:
    content = f.read()

不过要注意,这种方式会丢失原始字节的信息,适合你不需要保留二进制数据的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 17:12:39