Сегодня я получил данные через администратора Django, которые не удалось закодировать. Почему-то кодировка данных не в юникоде. Как это возможно?
У меня есть свойство name
в моей модели Client
, которое возвращает данные в юникоде:
@property
def name(self):
return u'{0} {1}'.format(self.firstname, self.lastname).strip()
Но это не работает:
>>> client
<Client: [Bad Unicode data]>
>>> client.lastname
'Dani\xc3\xabl'
>>> client.lastname.__class__
<type 'str'>
>>> u"{0} {1}".format(client.firstname, client.lastname)
Traceback (most recent call last):
File "<console>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 4: ordinal not in range(128)
Достаточно странно, кодирование имени/фамилии как обычной строки работает:
>>> "{0} {1}".format(client.firstname, client.lastname)
'Test Dani\xc3\xabl'
>>> "{0} {1}".format(client.firstname, client.lastname).decode('utf-8')
u'Test Dani\xebl'
Что здесь случилось? и как этот ввод попал в мою модель через админку?
Системный стек (это внешний сервер):
- Debian 6.0.5 (сжать)
- Джанго 1.4.1
- Питон 2.6.6
- MySQL 5.1.49
- MySQL-питон == 1.2.2
Это соответствующий код модели:
class Client(models.Model):
firstname = models.CharField(_("Firstname"), max_length=255)
lastname = models.CharField(_("Lastname"), max_length=255)
email = models.EmailField(_("Email"), unique=True, max_length=255)
class Meta:
db_table = u'clients'
ordering = ('firstname', 'lastname', 'email')
def __unicode__(self):
return u'{0} <{1}>'.format(self.name, self.email)
@property
def name(self):
return u'{0} {1}'.format(self.firstname, self.lastname).strip()
firstname
иlastname
это поля? Не могли бы вы опубликовать соответствующий код модели? - person Thomas Orozco   schedule 01.09.2012