2013-07-24 28 views
3

我一直在使用Python 2.7,Django 1.5和PostgreSQL 9.2兩個星期。從來沒有見過它。一切都安裝在我的Windows 7機器上,所以它應該有默認設置。 Django在我的數據庫中生成表格。看起來一切正常。 我能夠運行轉儲從我的數據庫中的數據:Python:可以將dumpdata加載數據返回。 UnicodeDecodeError

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' codec can't decode byte 0xff in position 0: invalid start byte」

如果我打開在test.json文件記事本,將其保存爲utf8,然後再試一次,然後我得到:

「No JSON object could be decoded」

文件看起來還是OK,不是空的。

順便說一下,當我用記事本打開JSON文件時,它提供了我將它保存爲Unicode。我的數據庫有UTF8編碼。請指教。謝謝。

+0

請勿使用記事本修改代碼 –

+0

show'print(repr(open('test.json','rb')。read(4)))' – jfs

回答

4

0xff在位置0看起來像一個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

+0

Peter,謝謝您的回覆。因爲我有Windows7,所以無法使用emacs。我確實安裝了你建議的實用程序並運行它。事實上,它顯示除了一個由記事本編輯的文件外,其他所有文件都是UTF-16。然而,在運行該實用程序後,我仍然有相同的「UnicodeDecodeError:'utf8'編解碼器無法解碼位置0中的字節0xff:無效起始字節」 –

+0

第1步:轉換爲UTF-8。第2步:刪除BOM。 –

+0

「我無法使用emacs,因爲我擁有Windows7」:是的,您可以。 https://www.gnu.org/software/emacs/download.html – pst