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

使用Python从Redis读取存储文件时遭遇UnicodeDecodeError问题求助

问题解决:Redis读取二进制文件触发UnicodeDecodeError

问题原因

你的Python Redis客户端默认会将get()获取的结果尝试解码为UTF-8字符串,但你存入的是文件的二进制数据(非纯UTF-8文本),解码时就会抛出UnicodeDecodeError。Redis CLI直接返回原始字节,所以不会有问题。

修复步骤

  1. 修正存储代码的语法错误
    你的代码里存在变量名大小写错误和关键字大小写错误,先修正:

    files = request.getlist('files')
    for file in files:
        redis_client.set('filename', file.read())
    

    (file.read()返回的是二进制字节,这部分逻辑是正确的)

  2. 读取时禁用自动解码
    有两种方式避免自动解码:

    • 方式一:连接Redis时全局禁用自动解码
      在创建Redis客户端实例时,设置decode_responses=False(部分redis-py版本默认会开启自动解码):
      redis_client = redis.Redis(host='localhost', port=6379, db=0, decode_responses=False)
      
    • 方式二:单次读取时指定禁用解码
      如果不想修改全局配置,读取时显式指定参数:
      file_data = redis_client.get('filename', decode_responses=False)
      

    这样获取到的file_data是二进制字节对象,你可以根据文件类型进行后续处理(比如写入本地文件)。

  3. 避免多文件覆盖问题
    注意你的代码里所有文件都存入同一个filename键下,会覆盖之前的文件数据。如果要存储多个文件,建议用唯一键名,比如:

    files = request.getlist('files')
    for idx, file in enumerate(files):
        redis_client.set(f'file_{idx}_{file.filename}', file.read())
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 18:52:07