首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Django找不到像这样包含unicode的对象?

为什么Django找不到像这样包含unicode的对象?
EN

Stack Overflow用户
提问于 2013-10-29 16:05:45
回答 2查看 554关注 0票数 0

例如,其中一个对象包含this_sub_string

代码语言:javascript
复制
>> repr(this_sub_string)
u'1 \u03bcM rosiglitazone / 0.1% DMSO for 1 hour'`

在其description字段中。但是当我像这样使用objects.all.filter(Q(description__contains=this_sub_string))搜索对象时,没有返回任何结果。

当我消除\u03bcM之前的字符串进行搜索时,我可以得到正确的结果

代码语言:javascript
复制
>>> models.Samples.objects.filter(description__contains=u' rosiglitazone / 0.1% DMSO for 1 hour')
[<Samples: 40171_GSM1199141_CBP CHIP-SEQ, 3T3-L1 DAY7 1H ROSI_Mus musculus>, <Samples: 40172_GSM1199139_RNAPII CHIP-SEQ, 3T3-L1 DAY7 1H ROSI REP2_Mus musculus>, <Samples: [Bad Unicode data]>, <Samples: 40176_GSM\
1199143_INPUT, 3T3-L1 DAY7 1H ROSI_Mus musculus>, <Samples: [Bad Unicode data]>, <Samples: 40180_GSM1199133_MED1 CHIP-SEQ, 3T3-L1 DAY7 1H ROSI_Mus musculus>, <Samples: [Bad Unicode data]>, <Samples: 40185_GSM119\
9137_RNAPII CHIP-SEQ, 3T3-L1 DAY7 1H ROSI REP1_Mus musculus>]

>>> models.Samples.objects.filter(description__contains=u' rosiglitazone / 0.1% DMSO for 1 hour')[0].description
u'{"source name": "3T3-L1 adipocytes (Day 7)", "treatment": "1 \\u03bcM rosiglitazone / 0.1% DMSO for 1 hour", "cell type": "3T3-L1 adipocytes", "chip antibody": "anti-CBP (sc-369; Santa Cruz)"}'

有人对此有什么想法吗?谢谢..

EN

回答 2

Stack Overflow用户

发布于 2013-10-29 16:41:52

这一部分让我认为您存储的不是字符串本身,而是包含此字符串的dict的表示或它的json转储。

代码语言:javascript
复制
>>> models.Samples.objects.filter(description__contains=u' rosiglitazone / 0.1% DMSO for 1 hour')[0].description
u'{"source name": "3T3-L1 adipocytes (Day 7)", "treatment": "1 \\u03bcM rosiglitazone / 0.1% DMSO for 1 hour", "cell type": "3T3-L1 adipocytes", "chip antibody": "anti-CBP (sc-369; Santa Cruz)"}'

在这种情况下,Unicode字符将在数据库中显示为\u03bcM,而不是utf-8字符。

要使用此字符串进行搜索,应以相同的方式进行处理(json转储或repr)

票数 1
EN

Stack Overflow用户

发布于 2013-10-29 16:42:23

我找了个黑客来解决这个问题

代码语言:javascript
复制
from _json import encode_basestring_ascii as c_encode_basestring_ascii

>>> c_encode_basestring_ascii(a)
'"1 \\u03bcM rosiglitazone / 0.1% DMSO for 1 hour"'

然后,查询可以返回正确的结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19652757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档