2011-12-27 94 views
1

我的網站需要能夠以不同語言提供數據。我將它設置爲使用utf-8,db設置也是這樣設置的。我已經通過管理員獲得了不同的unicode錯誤。django unicode編碼/解碼錯誤

例如:

  1. 在管理列表中,當從列表中的字段包含非ASCII字符。 (我得到UnicodeDecodeError)
  2. 當添加一個新條目時,如果該模型的unicode方法返回一個UTF-8解碼(修復#1),那麼UnicodeEncodeError。
  3. 在admin中使用filter_horizo​​ntal時,如果來自所使用模型的數據包含非ASCII字符,則過濾器將從表單中消失。

如果我設置的Unicode方法爲模型返回例如:這似乎解決#1和#2

return u'%s' % unicode(self.tag) 

,但隨後就在那個時候,我得到#3。

我一直在尋找解決方案,但找不到解決所有不同錯誤的東西。處理這些問題的最佳方式是什麼?

回答

6
from django.utils.encoding import smart_unicode 
... 
def __unicode__(self): 
    return smart_unicode(self.tag) 
+1

有效,謝謝! –

0

值得注意的是,您可以通過在數據庫中存儲數據之前以十六進制編碼數據來繞過unicode。

像這樣的事情足以

MyModel(name=name.encode('hex'), password=password).save()

然後,您可以執行name.decode('hex')將數據回恢復到原先的代表性。