0

BER でエンコードされた通話データ レコード (CDR) を処理しています。GPRS トンネリング プロトコルから。その中に1つのフィールドの値を取得し'\r\n'ました。

'\xa0\x06\x80\x04\r\n\xc4\x086' -- これはエンコードされた文字列、またはbytearray問題の原因です。タグa0に必要なすべての TLV 情報が含まれており、その長さは06です。内タグ80あり、長さは04です。しかし、次の方法で出力を取得すると、このように出力されます。

問題の原因となっている内部タグ80の値。その長さは04ですが、これをデコードするとpyasn1長さが05\rになりまし\nた。\r\nこのデータをエンコードするエンコーダーは、それが単一の要素であると想定していると思います。しかし、pyasn1 を使用してこれをデコードしているときに、エンコードされた値の TLV 表現でこの長さが欠落しているため、エラーがスローされます。

map(ord, '\xa0\x06\x80\x04\r\n\xc4\x086')
[160, 6, 128, 4, 13, 10, 196, 8, 54]

暗黙のタグ番号を使用しています。

pyasn1 の ber デコーダーとエンコーダーを使用してこれを解決する方法はありますか。

よろしくお願いいたします。

ハリダス N.

4

1 に答える 1

1

私はpyasn1に精通していませんが、入ってくるデータに焦点を当てることをお勧めします。それは、バイトのバイナリセットであるべきものをテキストとして扱う何かがあることを示唆しているためです...

内部タグが実際に len 4 の場合、\n は \r\n に置き換えられていますか?

于 2013-02-01T17:50:57.753 に答える