[英]decode/encode error django python
我有一个关键字列表
keywords = [u'encendió', u'polémica']
我正在尝试将它们加载到Django模型:
class myKeywords(model.Model):
keyword = models.charField()
def __unicode__(self):
return self.keyword.encode('utf-8')
这就是我正在尝试的:
for k in keywords:
keyObj, created = myKeywords.objects.get_or_create(keyword=k.decode('utf-8'))
print created, keyObj
但是,我一直在获取django.utils.encoding.DjangoUnicodeDecodeError: 'ascii' codec can't decode byte
。
我努力了:
u
decode('utf-8')
-如果在关键字前面添加了u
则此操作成功创建并保存了对象 __unicode__(self)
函数中删除encode('utf-8')
。 -这样成功地打印了关键字 因此,唯一有效的配置如下:
u
附加在关键字的前面 decode('utf-8')
或encode('utf-8')
但是我不确定这是否是正确的方法。 理想情况下,我应该阅读一个关键字并将其解码为utf-8
,然后将其保存到数据库中。 有什么建议么?
__unicode__
方法应返回一个unicode字符串,而不是字节字符串。 因此,您应该从__unicode__
方法中删除encode()
。
如果您的关键字具有u''
前缀,那么它们也是unicode字符串,也不必解码。
您不需要在__unicode__()
方法中将字符串encode()
为utf-8
,因为Django将数据库中的所有字符串作为unicode
。
从文档中
由于所有字符串都以Unicode字符串的形式从数据库返回,因此当Django从数据库检索数据时,基于字符的模型字段(CharField,TextField,URLField等)将包含Unicode值。 即使数据可以容纳ASCII字节串,也总是如此。
由于您的关键字已经是unicode
字符串(以'u'
decode()
在打印时无需执行decode()
。 也删除decode()
。
您的代码应如下所示:
models.py
class myKeywords(model.Model):
keyword = models.charField()
def __unicode__(self):
return u'%s'%(self.keyword)
keywords = [u'encendió', u'polémica']
for k in keywords:
keyObj, created = myKeywords.objects.get_or_create(keyword=k)
print created, keyObj
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.