Python 2与Python 3字符串酸洗

时间:2018-02-12 17:07:56

标签: python python-3.x python-2.7 pickle

在使用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='

1 个答案:

答案 0 :(得分:1)

Python在酸洗时可以使用different stream versions。 Python 2和Python 3之间的默认版本不同。

明确传递协议版本。使用$TextBoxes = $form.Controls |Where-Object {$_ -is [System.Windows.Forms.TextBox]} 可以跨版本获得一致的结果。

注意:确切的输出可能会改变,但是unpickling结果保持不变,模数" unicode" vs" ascii"在Python 2中:

pickle.dumps('test', protocol=2)