0

エンコードされた形式でデータを送信する iOS アプリがあります。PHP では、次のコードで適切にデコードされます。

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

Python では、次のコードは、PHP コードがデコードできる有効なエンコードされたオブジェクトを作成します (これdataは adictです)。

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 に答える