我是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)
答案 0 :(得分:0)
您的ASN.1模式看起来正确。您可以在asn1.io上验证语法。由于错误被报告为第一个字符(第1行,第1列),因此它可能是多余的引号或准备规范时插入的其他一些字符。
答案 1 :(得分:0)
Python字符串文字不是用四个引号引起来,而是使用三个引号引起来。
从问题中突出显示的语法中可以看出这是错误的。
我的Python安装完全拒绝您的代码。当我将结束定界符固定为三个引号时(但保留开始定界符不变),我得到了您报告的问题。 (请下次发布您的代码 verbatim 。)
同时修复这两个问题时,我会收到一个新错误:
asn1tools.codecs.EncodeError:答案:预期为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)