DjangoUnicodeDecodeError <TableTest>

本文介绍在Python 2.7环境下使用Django 1.8.4开发过程中遇到的Unicode编码问题及解决方案,重点讲解如何正确处理模型中的中文字段以避免序列化错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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编码


因为我的字符串中有中文,而导致序列化出了问题。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值