我们有一个以编码格式发送数据的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代码添加了一些额外的填充。如果我从应用程序编码的字符串中删除最后一个字符就可以了。我可以做些什么来解释这个问题?无法更改应用代码。即使有数百万设备运行我需要支持的旧代码,所以我仍然需要修复此问题。
答案 0 :(得分:0)
根据BSON specification,BSON文档必须以NULL字节(\x00
)终止。您是否检查过您尝试解码的字节字符串是否为NULL终止?如果没有,您可能需要在末尾附加一个NULL字节。