python 序列化_python 序列化

python的字符集真是麻烦,先看没有做pickle的情况,一切正常:

>>> val = u'中文¥200'

>>> k = blogQueryService.testPickle(val)

[('param1', u'\u4e2d\u6587\xa5200')]

>>> k

'\xe4\xb8\xad\xe6\x96\x87\xc2\xa5200'

>>> print k

中文¥200

blogQueryService.testPickle(val) 返回的是str类型,所以返回的是\xe4编码格式。

但如果对val做picke呢?

>>> from cStringIO import StringIO

>>> import cPickle as pickle

>>> pickler=pickle.Pickler

>>> unpickler=pickle.Unpickler

>>>

>>> val = u'中文¥200'

>>>

>>> file = StringIO()

>>> _pk = pickler(file)

>>> val = file.getvalue()

>>>

>>> val

'V\\u4e2d\\u6587\xa5200\np1\n.'

>>> k = blogQueryService.testPickle(val)

[('param1', 'V\\u4e2d\\u6587\xa5200\np1\n.')]

>>> k

'V\\u4e2d\\u6587\xef\xbf\xbd200\np1\n.'

>>>

传递的参数:

'V\\u4e2d\\u6587\xa5200\np1\n.'

返回的数值:

'V\\u4e2d\\u6587\xef\xbf\xbd200\np1\n.'

\xa5 变成 \xef\xbf\xbd

这说明在序列化时采用unicode编码是问题的,比如:

4599343187c402810c031cf153e5d35c.png

python貌似对utf-8编码是单独新搞了一个unicode 类型,

换句话说对于str类型只能采用默认的编码格式,如果要采用utf-8编码就会变成unicode类型。

>>> val = '中文¥200'

>>> val

'\xe4\xb8\xad\xe6\x96\x87\xc2\xa5200'

>>> k = val.decode('utf8')

>>> k

u'\u4e2d\u6587\xa5200'

>>> type(k)

>>> str(k)  #转换成str,编码格式又变回\xe4

'\xe4\xb8\xad\xe6\x96\x87\xc2\xa5200'

18a3fffbbf4dd6f5a66623b29e1e8c43.png

repr()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值