我已经使用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
出现以下错误:
“Unicode编码错误:“utf8”编解码器无法解码位置0中的字节0xff:起始字节无效”
如果我在记事本中打开test.json文件,将其另存为utf8
,然后重试,则会得到:
“没有JSON对象可以解码”
文件看起来仍然正常,不是空的。
顺便说一句,当我用记事本打开JSON文件时,它提供我将其保存为Unicode。我的数据库有UTF8编码。请建议。谢谢。
7条答案
按热度按时间tsm1rwdh1#
对我有效的方法是遵循以下步骤:
现在您可以使用loaddata。
但是,这只适用于小到记事本可以打开的文件。
ds97pgxw2#
位置0的
0xff
看起来像是little-endian UTF-16 byte order marker的开头。记事本的“Unicode”保存模式是little-endian UTF-16,所以如果你在创建json后从记事本保存它,这是有意义的。记事本甚至在utf-8中也会保留字节顺序标记,这可能会导致loaddata无法解析它。如果您手边没有未编辑的json,则需要删除BOM --就我个人而言,我会使用emacs,但another answer建议使用这个独立的Windows.exe:
http://www.bryntyounce.com/filebomdetector.htm
fivyi3re3#
我找到了一种解决这个问题的方法,通过手动重新输出一个新的二进制json文件,其中包含以下代码,
rb
代表“读取和二进制”,wb
代表“写入和二进制”。首先,转到shell:
其次,将test.json重写为二进制文件:
然后您可以载入档案:
上面的代码对我很有用,希望它也能对你有帮助。
bmvo0sr54#
我遇到了同样的问题时加载数据.它有一个问题与编码.安装记事本++.和更改编码格式为UTF-8
在右下角你可以看到当前的编码。2如果它不是UTF- 8,你可以简单地改变它为UTF-8从编码菜单选项卡。
这个解决方案对我很有效。
原柱
uujelgoq5#
如果你使用的是较新版本的windows 10,你可以使用记事本将UTF-16编码更改为UTF-8编码,只需再次保存文件并在保存对话框中选择编码选项即可。
wixjitnu6#
经过良好的研究,我得到了解决方案。在我的情况下,
datadump.json
文件有这个问题。现在您可以尝试运行该命令。您可以开始了:)
为了您的参考,我附上了下面的图片。
Notepad
Save as
UTF-8
huwehgph7#
在Windows上,如果使用-Xutf 8运行标准的dumpdata命令,它总是能为我解决这个问题:
这里有一篇文章可供参考:https://dev.to/methane/python-use-utf-8-mode-on-windows-212i