Python 2 vs Python 3 字符串酸洗
Python 2 vs Python 3 string pickling
我在使用 Python 2 和 Python 3 时得到不同的字符串酸洗输出(我想是由于不同的 str
类型)。
Python 2:
Python 2.7.12 (default, Dec 4 2017, 14:50:18)
[GCC 5.4.0 20160609]
>>> import pickle, base64
>>> a = pickle.dumps('test')
>>> base64.b64encode(a)
'Uyd0ZXN0JwpwMAou'
Python 3:
Python 3.5.2 (default, Nov 23 2017, 16:37:01)
[GCC 5.4.0 20160609]
>>> import pickle, base64
>>> a = pickle.dumps('test')
>>> base64.b64encode(a)
b'gANYBAAAAHRlc3RxAC4='
如何修改代码以在酸洗字符串时获得相同的结果?
编辑:
当使用 protocol=2
时仍然得到不同的泡菜:
# Python 2
>>> base64.b64encode(pickle.dumps('test', protocol=2))
'gAJVBHRlc3RxAC4='
# Python 3
>>> base64.b64encode(pickle.dumps('test', protocol=2))
b'gAJYBAAAAHRlc3RxAC4='
Python 酸洗时可以使用different stream versions。 Python 2 和 Python 3 之间的默认版本不同。
明确传递协议版本。使用 pickle.dumps('test', protocol=2)
以获得跨版本的一致结果。
注意: 确切的输出可能会改变,但 unpickling 结果保持不变,模 "unicode" vs "ascii" in Python 2 :
# Python 2.7 output:
>>> base64.b64encode(pickle.dumps('test', protocol=2))
'gAJVBHRlc3RxAC4='
# Decode output from Python 3:
>>> pickle.loads(base64.b64decode('gAJYBAAAAHRlc3RxAC4='))
u'test'
# Python 3.6 output:
>>> base64.b64encode(pickle.dumps('test', protocol=2))
b'gAJYBAAAAHRlc3RxAC4='
# Decoding Python 2's output:
>>> pickle.loads(base64.b64decode('gAJVBHRlc3RxAC4='))
'test' # Note, not u'test'.
我在使用 Python 2 和 Python 3 时得到不同的字符串酸洗输出(我想是由于不同的 str
类型)。
Python 2:
Python 2.7.12 (default, Dec 4 2017, 14:50:18)
[GCC 5.4.0 20160609]
>>> import pickle, base64
>>> a = pickle.dumps('test')
>>> base64.b64encode(a)
'Uyd0ZXN0JwpwMAou'
Python 3:
Python 3.5.2 (default, Nov 23 2017, 16:37:01)
[GCC 5.4.0 20160609]
>>> import pickle, base64
>>> a = pickle.dumps('test')
>>> base64.b64encode(a)
b'gANYBAAAAHRlc3RxAC4='
如何修改代码以在酸洗字符串时获得相同的结果?
编辑:
当使用 protocol=2
时仍然得到不同的泡菜:
# Python 2
>>> base64.b64encode(pickle.dumps('test', protocol=2))
'gAJVBHRlc3RxAC4='
# Python 3
>>> base64.b64encode(pickle.dumps('test', protocol=2))
b'gAJYBAAAAHRlc3RxAC4='
Python 酸洗时可以使用different stream versions。 Python 2 和 Python 3 之间的默认版本不同。
明确传递协议版本。使用 pickle.dumps('test', protocol=2)
以获得跨版本的一致结果。
注意: 确切的输出可能会改变,但 unpickling 结果保持不变,模 "unicode" vs "ascii" in Python 2 :
# Python 2.7 output:
>>> base64.b64encode(pickle.dumps('test', protocol=2))
'gAJVBHRlc3RxAC4='
# Decode output from Python 3:
>>> pickle.loads(base64.b64decode('gAJYBAAAAHRlc3RxAC4='))
u'test'
# Python 3.6 output:
>>> base64.b64encode(pickle.dumps('test', protocol=2))
b'gAJYBAAAAHRlc3RxAC4='
# Decoding Python 2's output:
>>> pickle.loads(base64.b64decode('gAJVBHRlc3RxAC4='))
'test' # Note, not u'test'.