使用Python从Redis读取存储文件时遭遇UnicodeDecodeError问题求助
问题解决:Redis读取二进制文件触发UnicodeDecodeError
问题原因
你的Python Redis客户端默认会将get()获取的结果尝试解码为UTF-8字符串,但你存入的是文件的二进制数据(非纯UTF-8文本),解码时就会抛出UnicodeDecodeError。Redis CLI直接返回原始字节,所以不会有问题。
修复步骤
修正存储代码的语法错误
你的代码里存在变量名大小写错误和关键字大小写错误,先修正:files = request.getlist('files') for file in files: redis_client.set('filename', file.read())(
file.read()返回的是二进制字节,这部分逻辑是正确的)读取时禁用自动解码
有两种方式避免自动解码:- 方式一:连接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是二进制字节对象,你可以根据文件类型进行后续处理(比如写入本地文件)。- 方式一:连接Redis时全局禁用自动解码
避免多文件覆盖问题
注意你的代码里所有文件都存入同一个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
相关产品推荐
相关产品推荐

