Django模型ImageField填充示例图片触发UnicodeDecodeError,求解决方案
解决Django填充ImageField时的UnicodeDecodeError错误
错误根源在于你打开图片文件时使用了默认的文本模式,而JPG是二进制格式文件,文本模式会尝试用utf-8解码二进制数据,导致解码失败。
以下是具体解决步骤:
以二进制模式打开文件
修改打开文件的代码,添加'rb'参数指定二进制读取模式:f = open(os.path.join(sample_img_dir, img), 'rb')推荐使用
with语句管理文件句柄with语句会自动关闭文件,避免资源泄漏,改进后的完整脚本:sample_img_dir = os.path.join(settings.BASE_DIR, 'doc', 'samples', 'img') # 过滤仅保留JPG/JPEG文件,避免误选非图片文件 valid_extensions = ('.jpg', '.jpeg') sample_images = [ fname for fname in os.listdir(sample_img_dir) if fname.lower().endswith(valid_extensions) ] if not sample_images: print("没有找到可用的示例图片") exit() img = random.choice(sample_images) img_path = os.path.join(sample_img_dir, img) with open(img_path, 'rb') as f: sample_img = File(f) obj = Phrase(image=sample_img) obj.save()额外检查点
确认sample_img_dir目录下没有非图片文件(比如.DS_Store、临时文本文件等),这些文件可能被os.listdir选中,导致后续错误。通过后缀过滤可以避免这类问题。
内容的提问来源于stack exchange,提问作者Trts
相关产品推荐
相关产品推荐

