django unicode编码/解码错误

时间:2011-12-27 02:37:54

标签: django unicode internationalization

我的网站需要能够以不同语言提供数据。我设置它所以它使用utf-8并且db设置也被设置为。我在管理员身上得到了不同的unicode错误。

例如:

  1. 在管理列表中,列表中的字段包含非ascii字符。 (我得到UnicodeDecodeError)
  2. 添加新条目时,如果模型的 unicode 方法返回utf-8解码(修复#1),则为UnicodeEncodeError。
  3. 在admin中使用filter_horizo​​ntal时,如果使用的模型中的数据包含非ascii字符,则过滤器将从表单中消失。
  4. 如果我为模型设置 unicode 方法,例如:

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

    这似乎解决了#1和#2,但那时我得到了#3。

    我一直在寻找一个解决方案,但无法找到解决所有不同错误的东西。处理这些问题的最佳方法是什么?

2 个答案:

答案 0 :(得分: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')将数据恢复为以前的表示形式。