0

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

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

在 Python 中,以下代码将创建一个有效的编码对象,然后 PHP 代码可以对其进行解码(在 this 中data是 a 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 代码添加了一些额外的填充。如果我从应用程序编码的字符串中删除最后一个字符,它就可以工作。我能做些什么来解决这个问题吗?无法更改应用程序代码。即使有数百万台设备运行我需要支持的旧代码,所以我仍然需要对此进行修复。

4

1 回答 1

0

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

于 2012-09-29T00:17:28.350 回答