Python pickle在版本之间转换为unicode

时间:2012-04-03 11:54:25

标签: python unicode pickle

我有一个使用Python 3.2腌制字典的过程。然后我需要使用Python 2.7或2.6来解开这个字典。问题是当在python版本之间进行传输时,我会得到一个充满unicode数据的字典,这会扰乱我试图将其输入的Python API。

Python 3.2中的Pickling:

myDict = {'a': 'first', 'b': 'second', 'c': 'third'}
with open(file, 'wb') as f:
    pickle.dump(myDict, f, 2)

在Python 2.6中取消:

with open(file, f) as f:
    myDict = pickle.load(f)

返回:{u'a':你'第一',你'':你'第三',你'':你'第二'}

我怎样才能准确回到我所投入的内容(即不是unicode)?

2 个答案:

答案 0 :(得分:6)

由于Python 3 are unicode

中的字符串,您实际上已经准确地收回了所放入的内容

要获得str,您可以转换字典中的键和值:

strDict = dict((k.encode(), v.encode()) for k, v in myDict.iteritems())

答案 1 :(得分:0)

正如steef所说,你得到的正是你输入的内容,因为在python 3 'foo'是一个unicode字符串,并且(在两个版本中)b'foo'是一个字节字符串。

unpickling之后的解决方案是将encode字符串转换为字节表示。

另一种方法是将你的数据序列化为yaml,无论你喜欢什么样的编码。