Python:dumpdata无法加载数据.的UnicodeDecodeError

Ele*_* Kr 4 python django postgresql json

我已经使用Python 2.7,Django 1.5和PostgreSQL 9.2两周了.从来没有见过它.所有东西都安装在我的Windows 7机器上,所以应该有默认设置.Django在我的数据库中精美地生成表.看起来一切正常.我可以通过运行以下方式从我的数据库转储数据:

manage.py dumpdata > test.json
Run Code Online (Sandbox Code Playgroud)

要么

manage.py dumpdata  --indent4 > test.json
Run Code Online (Sandbox Code Playgroud)

我看到它看起来应该是JSON文件.

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

python manage.py loaddata database = T2  test.json    // or without db name
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

"UnicodeDecodeError:'utf8'编解码器无法解码位置0的字节0xff:无效的起始字节"

如果我在记事本中打开test.json文件,保存为utf8,然后再试一次,然后我得到:

"没有JSON对象可以被解码"

该文件看起来还不错,不是空的.

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

Duc*_*own 10

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

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

现在您可以使用 loaddata。

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


Pet*_*per 5

0xff位置0看起来像是一个小尾数UTF-16 字节顺序标记的开头给我.记事本的"Unicode"保存模式是小端UTF-16,因此如果您在创建它后从记事本中保存了json,这是有意义的.记事本甚至会在utf-8中保留字节顺序标记,这可能会导致loaddata无法解析它.

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

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