2013-10-29 13 views
1

我正在使用loaddata重新加載夾具(出於某種原因,數據庫中的數據似乎已經損壞)。結果出現錯誤,表明loaddata將xml視爲ascii。事實上,這是UTF-8,這是造成錯誤:。django loaddata堅持讀取xml夾具ascii - 需要讀取爲utf-8

$ python manage.py loaddata --traceback ./countries/fixtures/initial_data.xml 
Traceback (most recent call last): 
    File "/home/marcintustin/oneclickrep/oneclickcosvirt/lib/python2.7/site-packages/django/core/management/commands/loaddata.py", line 202, in handle 
    'error_msg': e 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xf1 in position 6: ordinal not in range(128) 

(增加冗長只是告訴我,它在尋找燈具有沒有更多的信息可以了這是一個完整的堆棧跟蹤爲由loaddata提供)。

夾具開始:

<?xml version="1.0" encoding="utf-8"?> 
<django-objects version="1.0"> 
    <object pk="AF" model="countries.country"> 
     <field type="CharField" name="name">AFGHANISTAN</field> 
     <field type="CharField" name="printable_name">Afghanistan</field> 
     <field type="CharField" name="iso3">AFG</field> 
     <field type="PositiveSmallIntegerField" name="numcode">4</field> 
    </object> 
<!-- rest of file --> 
</django-objects> 

它宣稱自己是UTF-8,它是UTF-8(我重新保存它使用UTF-8 emacs的,只是要確定)。

這裏的問題不是我的輸入是utf-8,而是loaddata想把它當作別的東西。我如何強制loaddata解碼它的權利?或者,在手動將我的xml加載到unicode字符串之後,以編程方式調用loaddata的東西有多簡單?

在linux上使用django 1.4,使用sqlite作爲數據庫後端。

回答

1

雖然您可以通過call_commanddjango.core.management以編程方式調用loaddata,但它看起來沒有設置編碼或字符串輸入的選項。所以當你調用它時,你仍然會傳遞相同的文件,並且會遇到同樣的問題。

一種選擇是創建您自己的具有編碼參數的loaddata。您可以複製默認的loaddata command並添加幾行來執行編碼。看起來你想要開始的相關行是here

+0

謝謝,很有用。 – Marcin