I have been using Python 2.7, Django 1.5 and PostgreSQL 9.2 for two weeks. Never saw it before. Everything is freshly installed on my Windows 7 machine, so it should have default settings. Django beautifully generates tables in my db. Looks like everything works fine. I am able to dump data from my database by running:
manage.py dumpdata > test.json
or
manage.py dumpdata --indent4 > test.json
I saw that the JSON file it looks as it should.
Then, I truncate some tables and try to load them from the JSON file with:
python manage.py loaddata database = T2 test.json // or without db name
I got the following error:
“UnicodeDecodeError: 'utf8' codec can't decode byte 0xff in position 0: invalid start byte”
If I open the test.json file in notepad, save it as utf8
and try again, then I get:
“No JSON object could be decoded”
The file still looks OK, not empty.
By the way, when I open the JSON file with notepad it offers me to save it as Unicode. My database has UTF8 encoding. Please advise. Thank you.
What worked for me is following these steps:
- Open the file in regular notepad
- Select save as
- Select encoding "UTF-8" (Not "UTF-8 (With BOM)")
- Save the file.
Now you can use loaddata.
However, this only works for files that are small enough for notepad to open.
0xff
in position 0 looks like the start of a little-endian UTF-16 byte order marker to me. Notepad's "Unicode" save mode is little-endian UTF-16, so that makes sense if you saved your json from Notepad after creating it. Notepad will keep the byte order marker even in utf-8, which could plausibly cause loaddata to fail to parse it.
If you don't have your un-edited json still handy, you'll need to remove the BOM - personally I'd use emacs, but another answer suggested this stand-alone Windows .exe:
http://www.bryntyounce.com/filebomdetector.htm
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With