我选择使用pickle(+ base64 + TCP套接字)在我的python3代码和旧版python2代码之间通信数据,但是我在datetime对象方面遇到了麻烦:
PY3对象在PY2上的修补效果很好,但是TypeError在调用datetime构造函数时,相反会引发a ,然后UnicodeEncodeError在load_reduce函数中引发a 。
这个要点提供了简短的测试程序和日志,包括PY2和PY3泡菜的dis输出
我在PY2中使用pickle.dumps(reply, protocol=2),
然后pickle._loads(pickled, fix_imports=True, encoding='latin1')在PY3中使用
(尝试None和utf-8均未成功)
本机cPickle loads解码也失败,我仅使用纯python _loads进行调试。
这是一个datetime错误吗?也许datetime.__getstate__/__setstate__实现不兼容?
欢迎在代码上做任何评论...
PY-3.4.0泡菜:
0: \x80 PROTO 2
2: c GLOBAL 'datetime datetime'
21: q BINPUT 0
23: c GLOBAL '_codecs encode'
39: q BINPUT 1
41: X BINUNICODE u'\x07\xde\x07\x11\x0f\x06\x11\x05\n\x90'
58: q BINPUT 2
60: X BINUNICODE u'latin1'
71: q BINPUT 3
73: \x86 TUPLE2 …Run Code Online (Sandbox Code Playgroud)