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