如何解决SQLite3迁移PostgreSQL时的UnicodeDecodeError编码错误?
解决Django loaddata时的UnicodeDecodeError问题
这个错误的核心原因是Windows命令行用>重定向生成的dump.json是UTF-16 LE编码(带BOM头0xff),而Ubuntu服务器上的Django默认以UTF-8解码文件,导致编码不匹配。以下是几种可行的解决方法:
方法一:重新生成UTF-8编码的dump文件(推荐)
在Windows本地生成备份时,直接指定UTF-8编码,避免默认的UTF-16:
- 用PowerShell执行:
python manage.py dumpdata | Out-File -Encoding UTF8 dump.json - 若用CMD,先切换编码为UTF-8再生成:
chcp 65001 && python manage.py dumpdata > dump.json
方法二:转换现有dump文件的编码
如果已经生成了带编码问题的dump.json,可以在Ubuntu服务器上用iconv工具转换编码:
# 将UTF-16 LE编码的文件转为UTF-8 iconv -f utf-16le -t utf-8 dump.json > dump_utf8.json # 用转换后的文件恢复数据 python manage.py loaddata dump_utf8.json
也可以在Windows下用记事本打开dump.json,选择「另存为」,编码选「UTF-8」后保存,再上传到服务器。
额外注意事项
- 确保本地和服务器的Django版本一致,避免序列化/反序列化的兼容性问题
- 恢复数据前,务必在服务器上执行过
python manage.py migrate,确保数据库表结构已创建 - 你之前删除
ContentType的操作是正确的,能避免跨数据库迁移时的主键冲突问题
内容的提问来源于stack exchange,提问作者Huzkuy
相关产品推荐
相关产品推荐

