python 2.7.11
django 1.8.4
因为用的是2.7版本的python,所以稍微不注意很容易出现unicode编码问题,我编写了一个模型,并且该模型使用了unicode兼容修饰,如下:
@python_2_unicode_compatible
class UserVersion(models.Model):
'''
用户版本信息
'''
STATE_CHIOCE = (('A', '激活'),
('D', '未激活'),
('T', '测试'),)
OS_CHIOCE = (('W', 'Windows'),
('L', 'Linux',),
('M', 'MacOS'),
)
#版本
version = models.CharField('版本', max_length=128, null=False, )
#软件的平台(windows操作系统,linux操作系统)
os_name = models.CharField('操作系统', max_length=4, choices=OS_CHIOCE, default='W', null=False)
#状态 总共存在三种状态(未激活、激活、测试)
state = models.CharField('工作状态', max_length=4, choices=STATE_CHIOCE, default='D', null=False)
def __str__(self):
#显示显示文字,不显示存储内容
s = u'版本:%s 状态:%s' % (toU(self.version), toU(self.get_state_display()))
#Log.error(type(self.version))
#Log.error(type(self.get_state_display()))
#Log.error(s)
return s
原来是因为从数据库中取出的数据self.version和self.state都是unicode编码导致的,导致了序列化失败,所以我将
s = '版本:%s 状态:%s' % (toUtf8(self.version), toUtf8(self.get_state_display()))
修改为
<pre name="code" class="python">s = u'版本:%s 状态:%s' % (toU(self.version), toU(self.get_state_display()))
特别注意一个前面有u,一个没有
注:toUtf8,是将unicode转换为utf-8编码
toU,是将utf-8转换为unicode编码
因为我的字符串中有中文,而导致序列化出了问题。