簡體   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