【问题标题】:Pyasn1 BER encoding with carriage return \r\n带回车的 Pyasn1 BER 编码 \r\n
【发布时间】:2013-01-31 12:23:14
【问题描述】:

我正在处理 BER 编码的呼叫数据记录 (CDR)。来自 GPRS 隧道协议。其中我得到了一个字段的值,其中包含'\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.

【问题讨论】:

    标签: python asn.1


    【解决方案1】:

    我对 pyasn1 不熟悉,但我建议关注传入的数据,因为这对我来说表明存在将二进制字节集视为文本的东西......

    如果内部标签确实是 len 4,那么 \n 是否被替换为 \r\n?

    【讨论】:

    • 就地替换 hack 不起作用。我想知道,这是 asn1 数据中的正常行为还是专门针对 pyasn1 ?
    • 我还没有找到另一个解决方案......所以我暂时继续使用替换选项。谢谢。
    • 不,跟asn1数据扯上关系肯定不正常!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    相关资源
    最近更新 更多