Django查询返回非unicode字符串?

时间:2014-04-06 22:41:53

标签: django postgresql django-models

我对今天遇到的问题感到非常困惑:我有一个PostgreSQL数据库,其表格不是由Django管理的,而是通过QuerySet对这些表进行完全正常的查询。但是,我开始获得Unicode异常,当我开始挖掘时,我发现我的QuerySets正在返回非Unicode字符串!

示例代码:

d = Document.objects.get(id=45787)
print repr(d.title), type(d.title)

上述语句的输出是普通字符串(没有u前缀),后跟<str>类型标识符。此外,此普通字符串包含原始字节格式的UTF-8数据!如果我调用d.title.decode('utf-8'),我会得到有效的Unicode字符串!

更令人费解的是,某些字段正常工作。同一个表/模型包含另一个相同类型的html_filename TextField,其中正确返回,作为Unicode字符串

我有 no 特殊选项,数据库数据已正确编码,我甚至不知道从哪里开始搜索解决方案。这是Django 1.6.2。

更新

数据库服务器编码像往常一样是UTF8,并且数据已正确编码。这是在Ubuntu上的PostgreSQL 9.1上。

更新2:

我想我可能找到了原因,但我不知道它为什么会这样:我认为数据库字段像往常一样用text类型定义,但是它们被定义了为citexthttp://www.postgresql.org/docs/9.1/static/citext.html)。由于Django模型是不受管理的,因此看起来Django并不能将字段类型解释为值得转换为Unicode。任何想法如何强制Django这样做?

1 个答案:

答案 0 :(得分:0)

显然,Django不会将citext类型的字段视为文本字段,并将它们作为Unicode字符串返回。