我正在使用 MessagePack 开发客户端 SDK。当我的服务器在 java 中时,我需要在 java、ObjC 和 python 中开发客户端。我对 java 和 ObjC msgpack 库没有任何问题,但是在 python 中,当我打包一个字符串值超过 31 个字符的字典时,打包的数据不会以其他语言解包。尝试在 python 中解压同样的工作很好,只要字符串长度小于 32,互操作性也很好。下面是一个失败的python示例..
myPacket = {u"api_key":u"ad09739ac168ff2a199fb24eb4e24db8"}
msgPackedPacket = umsgpack.packb(myPacket)
为此生成的二进制数据是
<81a76170 695f6b65 79d92061 64303937 33396163 31363866 66326131 39396662 32346562 34653234 646238>
而如果我在 ObjC 中隐藏具有相同键值的字典,我会得到
<81a76170 695f6b65 79da0020 61643039 37333961 63313638 66663261 31393966 62323465 62346532 34646238>
ObjC 结果解包很好,python 不会..您可以注意到来自 ObjC 的数据中的 2 个额外字节。
一个正常工作的例子如下
myPacket = {u"api_key":u"ad09739ac168ff2a199fb24eb4e24d"}
这里的字符数= 30..我在python中得到以下字节
<81a76170 695f6b65 79be6164 30393733 39616331 36386666 32613139 39666232 34656234 65323464>
对于 ObjC,我得到以下字节..
<81a76170 695f6b65 79be6164 30393733 39616331 36386666 32613139 39666232 34656234 65323464>
如果我错过了一些明显的东西,我很抱歉.. 寻找任何解决方法或建议,因为我被打击了超过一天..
提前致谢。