json Python:可以转储数据,但无法加载回数据,UnicodeDecodeError

bttbmeg0  于 2022-11-19  发布在  Python
关注(0)|答案(7)|浏览(148)

我已经使用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编码。请建议。谢谢。

tsm1rwdh

tsm1rwdh1#

对我有效的方法是遵循以下步骤:

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

现在您可以使用loaddata。
但是,这只适用于小到记事本可以打开的文件。

ds97pgxw

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

fivyi3re

fivyi3re3#

我找到了一种解决这个问题的方法,通过手动重新输出一个新的二进制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

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

bmvo0sr5

bmvo0sr54#

我遇到了同样的问题时加载数据.它有一个问题与编码.安装记事本++.和更改编码格式为UTF-8
在右下角你可以看到当前的编码。2如果它不是UTF- 8,你可以简单地改变它为UTF-8从编码菜单选项卡。
这个解决方案对我很有效。
原柱

uujelgoq

uujelgoq5#

如果你使用的是较新版本的windows 10,你可以使用记事本将UTF-16编码更改为UTF-8编码,只需再次保存文件并在保存对话框中选择编码选项即可。

wixjitnu

wixjitnu6#

经过良好的研究,我得到了解决方案。在我的情况下,datadump.json文件有这个问题。

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

现在您可以尝试运行该命令。您可以开始了:)
为了您的参考,我附上了下面的图片。
Notepad
Save as
UTF-8

huwehgph

huwehgph7#

在Windows上,如果使用-Xutf 8运行标准的dumpdata命令,它总是能为我解决这个问题:

python -Xutf8 manage.py dumpdata app.mymodel > app/fixtures/mymodel.json

这里有一篇文章可供参考:https://dev.to/methane/python-use-utf-8-mode-on-windows-212i

相关问题