今日、私はDjangoadminを介してエンコードできないデータを受け取りました。どういうわけか、データのエンコーディングはユニコードではありません。これはどのように可能ですか?
モデルに、データをUnicodeで返す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(スクイーズ)
- Django 1.4.1
- Python 2.6.6
- MySQL 5.1.49
- MySQL-python == 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()