0

我是 asn1 的新手,我的议程是将 python 字典转换为 .asn 格式。当我运行以下代码时,出现以下错误

ParseError:第 1 行第 1 列的 ASN.1 语法无效:'>!<"':预期的模块引用。

from __future__ import print_function
from binascii import hexlify
import asn1tools

specification=""""
Foo DEFINITIONS ::= BEGIN

    Question ::= SEQUENCE {
        id        INTEGER,
        question  IA5String
    }

    Answer ::= SEQUENCE {
        id        INTEGER,
        answer    BOOLEAN
    }

END
""""


Foo = asn1tools.compile_string(specification, 'uper')

Question = {'id': 2, 'question': u'Hi how r u?!'}
Answer ={'id': 2, 'answer': u'Hi i am good'}
encoded = Foo.encode('Question', Question)
encoded1 = Foo.encode('Answer', Answer)
decoded = Foo.decode('Question', Question)

print('Question:', Question)
print('Encoded:', hexlify(encoded).decode('ascii'))
print('Decoded:', decoded)
4

2 回答 2

1

Python 字符串文字不是用四个引号括起来的,而是三个。

您可以从问题中突出显示的语法中看出这是错误的。

我的 Python 安装完全拒绝您的代码。当我将结束定界符固定为三个引号时(但保持开始定界符不变),我得到了您报告的问题。(请下次逐字发布您的代码。)

当我修复两者时,我收到一个新错误:

asn1tools.codecs.EncodeError: answer: bool 类型的预期数据,但是你好,我很好。

这是因为你试图使用一串英语,比如布尔值;它应该是:

Answer ={'id': 2, 'answer': True}

最后,解码失败,因为您将错误的参数传递给Foo.decode; 它应该是:

decoded = Foo.decode('Question', encoded)

现在它起作用了。


from __future__ import print_function
from binascii import hexlify
import asn1tools

specification="""
Foo DEFINITIONS ::= BEGIN

    Question ::= SEQUENCE {
        id        INTEGER,
        question  IA5String
    }

    Answer ::= SEQUENCE {
        id        INTEGER,
        answer    BOOLEAN
    }

END
"""


Foo = asn1tools.compile_string(specification, 'uper')

Question = {'id': 2, 'question': u'Hi how r u?!'}
Answer ={'id': 2, 'answer': True}
encoded = Foo.encode('Question', Question)
encoded1 = Foo.encode('Answer', Answer)
decoded = Foo.decode('Question', encoded)

print('Question:', Question)
print('Encoded:', hexlify(encoded).decode('ascii'))
print('Decoded:', decoded)
于 2019-07-17T13:20:10.870 回答
0

您的 ASN.1 架构看起来正确。您可以在asn1.io验证语法。由于报告的错误是第一个字符(第 1 行,第 1 列),因此它可能是一个额外的引号或在您准备规范时插入的其他一些字符。

于 2019-07-09T15:02:01.847 回答