2013-12-05 1 views
0
class Article(models.Model): 
     title = models.Attribute() 
     tags = models.ListField(unicode) 

new = Article(title='what ever') 
new.tags = [ u'Niña', u'Niñb' ] 

new.is_validate() 
>>> True 

new.save() 

While, когда нагрузка:Redisco ListField юникода сохранить ошибку, но проверить истинную

Article.objects.all() 

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128) 

В Redis-Cli:

redis 127.0.0.1:6379> GET "Article:tags:5omv5reh" 
(error) ERR Operation against a key holding the wrong kind of value 

Так что причина того, что это вызвано?

+0

Как ошибка говорит: сохраненные данные Unicode не могут быть отображены при декодировании в ASCII. –

+0

@ Симеон Виссер, так как понимать redis-cli? Я думаю, что это не спасло успех. – Scen

ответ

1

Итак, после попытки строки unicode всегда следует кодировать и сохранять в виде строки. Когда get, всегда нужно декодировать. здесь приходит код:

class Article(models.Model): 
     title = models.Attribute() 
     tags = models.ListField(str) 

new = Article(title='what ever') 
new.tags = [ u'Niña'.encode('utf-8'), u'Niñb'.encode('utf-8') ] 

new.is_validate() 
>>> True 

new.save() 

При печати:

articles = Article.objects.all() 
for i in articles: 
    print i.decode('utf-8') 
Смежные вопросы