繁体   English   中英

解码/编码错误Django Python

[英]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

我努力了:

  1. 从关键字前面添加/删除u
  2. 在创建关键字对象时删除decode('utf-8') -如果在关键字前面添加了u则此操作成功创建并保存了对象
  3. __unicode__(self)函数中删除encode('utf-8') -这样成功地打印了关键字

因此,唯一有效的配置如下:

  1. u附加在关键字的前面
  2. 不要在其他任何地方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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM