首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python: dumpdata不能加载数据。UnicodeDecodeError

Python: dumpdata不能加载数据。UnicodeDecodeError
EN

Stack Overflow用户
提问于 2013-07-24 19:53:23
回答 7查看 9.3K关注 0票数 11

我已经使用Python2.7、Django 1.5和PostgreSQL 9.2两个星期了。以前从没见过。所有的东西都是新安装在我的Windows 7机器上,所以它应该有默认设置。Django漂亮地在我的数据库中生成表。看起来一切都很好。通过运行以下命令,我可以从数据库中转储数据:

代码语言:javascript
复制
manage.py dumpdata > test.json

代码语言:javascript
复制
manage.py dumpdata  --indent4 > test.json

我看到了JSON文件,它看起来像它应该有的样子。

然后,我截断一些表并尝试用以下方法从JSON文件中加载它们:

代码语言:javascript
复制
python manage.py loaddata database = T2  test.json    // or without db name

我得到了以下错误:

“UnicodeDecodeError:'utf8‘编解码器无法在0位置解码字节0 0xff :无效开始字节”

如果我在记事本中打开test.json文件,将其保存为utf8并重试,则得到:

“不能解码JSON对象”

文件看起来还可以,而不是空的。

顺便说一下,当我用记事本打开JSON文件时,它提供了将其保存为Unicode的功能。我的数据库有UTF8编码。请给我建议。谢谢。

EN

回答 7

Stack Overflow用户

发布于 2020-01-22 10:05:37

对我起作用的是遵循以下步骤:

代码语言:javascript
复制
- Open the file in regular notepad
- Select save as
- Select encoding "UTF-8" (Not "UTF-8 (With BOM)")
- Save the file.

现在您可以使用加载数据。

但是,这只适用于小到足以打开记事本的文件。

票数 25
EN

Stack Overflow用户

发布于 2013-07-24 20:06:41

在我看来,0位置的0xff就像一个小小的终端UTF-16 字节顺序标记的开始。记事本的"Unicode“保存模式是小终端UTF-16,所以如果您在创建记事本后将json从记事本中保存下来,这是有意义的。即使在utf-8中,记事本也会保留字节顺序标记,这很可能导致加载数据无法解析它。

如果您还没有准备好未经编辑的json,您需要删除BOM --就我个人而言--我会使用emacs,但是另一个答案建议使用这种独立的.exe:

http://www.bryntyounce.com/filebomdetector.htm

票数 6
EN

Stack Overflow用户

发布于 2018-08-27 05:27:23

我找到了一种解决这个问题的方法,方法是手动重新输出一个新的二进制json文件,它的代码如下:rb代表“读和二进制”,wb表示“写和二进制”。

首先,转到shell:

代码语言:javascript
复制
python manage.py shell

其次,将test.json重写为二进制文件:

代码语言:javascript
复制
with open('path/to/test.json', 'rb') as f:
    data = f.read()
newdata = open('newfile.json', 'wb')
newdata.write(data)
newdata.close()
exit()

然后您可以加载该文件:

代码语言:javascript
复制
python manage.py loaddata newfile.json

以上代码适用于我。希望它也能帮到你。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17843630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档