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

Django脚本调用call_command执行dumpdata出现charmap编码错误如何解决

错误原因

你在命令行执行导出命令时添加的-Xutf8参数会强制Python解释器使用UTF-8作为默认IO编码,而脚本运行时当前Python进程默认使用系统编码(Windows环境下为charmap/gbk),遇到中文字符等非ASCII内容时无法编码写入文件,因此触发报错。

解决方案

  • 方案1:手动指定输出文件编码(兼容性最高,推荐)
    不使用call_command内置的output参数,自行创建UTF-8编码的文件流传入stdout,不受系统默认编码影响:

    import os
    from django.core import management
    
    # 构造目标文件路径
    dump_file_path = os.path.join(path, "app/fixtures/data.json")
    # 手动打开文件,指定UTF-8编码
    with open(dump_file_path, "w", encoding="utf-8") as f:
        management.call_command(
            "dumpdata",
            "app.ModelName", # 注意补上你需要导出的模型,和命令行参数一致
            indent=4,
            format="json",
            stdout=f,
            verbosity=1,
        )
    
  • 方案2:脚本开头强制设置IO编码
    在导入Django相关模块前,配置Python IO编码环境变量:

    import os
    # 强制设置Python IO编码为UTF-8,需放在导入django、management等模块前
    os.environ["PYTHONIOENCODING"] = "utf-8"
    
    from django.core import management
    # 后续你的原有call_command代码无需修改
    
  • 方案3:执行脚本时添加编码参数
    运行你的脚本时和执行dumpdata命令一样传入-Xutf8参数即可,原有代码无需修改:

    py -Xutf8 你的脚本文件名.py
    

补充注意

你当前的call_command代码中遗漏了命令行里指定的app.ModelName参数,如果只需要导出指定模型的数据记得补上,否则会默认导出整个数据库的所有数据。另外路径中不需要手动写双斜杠,os.path.join会自动适配不同系统的路径分隔符。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 07:45:02