8

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

manage.py dumpdata > test.json

或者

manage.py dumpdata  --indent4 > test.json

我看到它看起来应该的 JSON 文件。

然后,我截断了一些表并尝试从 JSON 文件中加载它们:

python manage.py loaddata database = T2  test.json    // or without db name

我收到以下错误:

“UnicodeDecodeError: 'utf8' 编解码器无法解码位置 0 的字节 0xff: 无效的起始字节”</p>

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

“无法解码任何 JSON 对象”</p>

该文件看起来仍然正常,而不是空的。

顺便说一句,当我用记事本打开 JSON 文件时,它让我可以将其保存为 Unicode。我的数据库有 UTF8 编码。请指教。谢谢你。

4

6 回答 6

19

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

- Open the file in regular notepad
- Select save as
- Select encoding "UTF-8" (Not "UTF-8 (With BOM)")
- Save the file.

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

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

于 2020-01-22T10:05:37.867 回答
5

0xff在位置 0 对我来说看起来像是小端 UTF-16字节顺序标记的开始。记事本的“Unicode”保存模式是 little-endian UTF-16,因此如果您在创建后从记事本中保存了 json,这很有意义。即使在 utf-8 中,记事本也会保留字节顺序标记,这可能会导致 loaddata 无法解析它。

如果您没有未编辑的 json 仍然方便,则需要删除 BOM - 我个人会使用 emacs,但另一个答案建议使用这个独立的 Windows .exe:

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

于 2013-07-24T20:06:41.530 回答
1

我在加载数据时遇到了同样的问题。它有编码问题。安装记事本++。并将编码格式更改为 UTF-8

在右下角可以看到当前的编码。如果不是 UTF-8,您只需从编码菜单选项卡将其更改为 UTF-8。

这个解决方案对我有用。

原帖

于 2020-01-14T02:22:29.270 回答
1

我找到了一种解决此问题的方法,方法是手动重新输出带有以下代码的新二进制 json 文件,rb代表“读取和二进制”,wb代表“写入和二进制”。

首先,进入shell:

python manage.py shell

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

with open('path/to/test.json', 'rb') as f:
    data = f.read()
newdata = open('newfile.json', 'wb')
newdata.write(data)
newdata.close()
exit()

然后你可以加载文件:

python manage.py loaddata newfile.json

上面的代码对我有用。希望它也能帮助你。

于 2018-08-27T05:27:23.337 回答
1

如果您使用的是较新版本的 Windows 10,您可以使用记事本将编码从 UTF-16 更改为 UTF-8,只需再次保存文件并在保存对话框中选择编码选项即可。请参见下面的示例图像。

于 2020-01-30T18:45:29.887 回答
0

经过很好的研究,我得到了解决方案。就我而言,datadump.json文件有问题。

  • 只需以记事本格式打开文件
  • 点击另存为选项
  • 转到下面的编码部分并单击“UTF-8”
  • 保存文件。

现在您可以尝试运行该命令。你已准备好出发 :)

供您参考,我在下面附上了图片。

记事本

另存为

UTF-8

于 2022-01-29T10:54:21.090 回答