打包/解压缩和BSON编码/解码数据

时间:2012-09-28 23:30:36

标签: php python

我们有一个以编码格式发送数据的iOS应用。在PHP中,以下代码将正确解码它。

bson_decode(pack("H*", $hex_string));

在Python中,以下代码将创建一个有效的编码对象,PHP代码可以对其进行解码(data在此中为dict)。

from bson import BSON
def encode(data):
    return str(BSON.encode(data)).encode('hex')

以下Python代码将解码由上述Python代码编码的字符串:

from bson import BSON
def parse(str):
    hexed = str.decode('hex')
    return BSON.decode(BSON(hexed))

理论上应该解码从应用程序发送的数据。但它引发了以下例外:

bson.errors.InvalidBSON: bad eoo

看起来像编码应用程序中的数据的Objective C代码添加了一些额外的填充。如果我从应用程序编码的字符串中删除最后一个字符就可以了。我可以做些什么来解释这个问题?无法更改应用代码。即使有数百万设备运行我需要支持的旧代码,所以我仍然需要修复此问题。

1 个答案:

答案 0 :(得分:0)

根据BSON specification,BSON文档必须以NULL字节(\x00)终止。您是否检查过您尝试解码的字节字符串是否为NULL终止?如果没有,您可能需要在末尾附加一个NULL字节。