Django从SQLite迁移到MySQL时JSON数据导入遇Unicode解码错误
Django数据导入UnicodeDecodeError解决方法
问题根源
导出的JSON文件编码非UTF-8,或包含Windows-1252等编码的特殊字符(比如0x99对应的™符号),导致Django默认UTF-8解码失败。修改Django源码的解码方式不是合理方案,应从导出/导入的编码处理入手。
具体解决方案
重新导出数据(推荐)
避免用系统重定向>导致编码异常,改用Django内置参数指定输出文件,确保编码为UTF-8:python manage.py dumpdata --output datadump.json --indent 2若仍有问题,用自定义脚本强制UTF-8导出:
import os import django from django.core import serializers os.environ.setdefault("DJANGO_SETTINGS_MODULE", "你的项目名.settings") django.setup() # 序列化所有模型数据,可替换成指定模型类 serializer = serializers.get_serializer("json")() data = serializer.serialize(serializers.get_model_list()) with open("datadump.json", "w", encoding="utf-8") as f: f.write(data)修复现有JSON文件编码
用VS Code打开文件,右下角查看当前编码,点击后选择「通过编码保存」→「UTF-8」;或用Windows命令行转换:powershell -Command "(Get-Content datadump.json -Encoding Default) | Set-Content datadump.json -Encoding UTF8"自定义导入脚本指定编码
编写脚本导入时明确指定UTF-8编码,同时处理异常字符:import os import django from django.core import serializers os.environ.setdefault("DJANGO_SETTINGS_MODULE", "你的项目名.settings") django.setup() with open("datadump.json", "r", encoding="utf-8", errors="replace") as f: for obj in serializers.deserialize("json", f): obj.save()
内容的提问来源于stack exchange,提问作者Mohammad Hawa
相关产品推荐
相关产品推荐

