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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 07:20:35