Python将字符串转换为UTF

时间:2018-08-22 20:53:22

标签: python-3.x pysnmp

我有一个OctetString值0xe4c722d60a61(实际上是一个MAC地址),我的代码在转换为字符串(例如, 'äÇ"Ö\na'

该代码处理大量数据,并且只有一小部分属于这种类型。

如何阻止这种情况发生?

这是输出:

(Pdb) snmpVal
[ObjectType(ObjectIdentity(<ObjectName value object at 0x7f77d152eef0 tagSet <TagSet object at 0x7f77d620ba20 tags 0:0:6> payload [1.3.6.1.2.1.2.2.1.6.3]>), <PhysAddress value object at 0x7f77d152e7b8 encoding iso-8859-1 subtypeSpec <ConstraintsIntersection object at 0x7f77d61d7518 consts <ValueSizeConstraint object at 0x7f77d61d74e0 consts 0, 65535>> tagSet <TagSet object at 0x7f77d620b550 tags 0:0:4> payload [e4:c7:22:d6:0a:60]>)]
(Pdb) snmpVal[0][1]
<PhysAddress value object at 0x7f77d152e7b8 encoding iso-8859-1 subtypeSpec <ConstraintsIntersection object at 0x7f77d61d7518 consts <ValueSizeConstraint object at 0x7f77d61d74e0 consts 0, 65535>> tagSet <TagSet object at 0x7f77d620b550 tags 0:0:4> payload [e4:c7:22:d6:0a:60]>
(Pdb) str(snmpVal[0][1])
'äÇ"Ö\n`'
(Pdb) hex(snmpVal[0][1])
*** TypeError: 'PhysAddress' object cannot be interpreted as an integer

这是代码:

    cmdGen = cmdgen.CommandGenerator()
    errorIndication, errorStatus, errorIndex, snmpVal = cmdGen.getCmd(
        cmdgen.UsmUserData(user, 
                        authKey=authKey, 
                        privKey=privKey, 
                        authProtocol=authProto, 
                        privProtocol=privProto, 
                        securityEngineId=None
                ),
        cmdgen.UdpTransportTarget((sHost, 161)),
        '1.3.6.1.2.1.2.2.1.6.3' )

2 个答案:

答案 0 :(得分:1)

如果您需要处理原始OCTET STRING值,只需在对象上调用.asOctets()。您将以bytes(Py3)或str(Py2)结尾。如果您需要将OCTET STRING转换为unicode,则可以从此处运行unicode解码器(我怀疑这是个好主意)。

如果您希望用友好的方式表示MAC地址,只需在对象上调用.prettyPrint()。如果已经针对MIB进行了解析,则pysnmp知道它是PhysAddress的一种OctetString,因此.prettyPrint()会将其转换为冒号分隔的十六进制形式。

答案 1 :(得分:0)

您不想通过描述的声音将其转换为UTF字符串。 Python有一个称为hex的内置函数供您使用。它将任何int值转换为十六进制字符串。从那里,您可以自己添加一些列表理解和字符串连接的冒号。试试这个:

a = hex(0xe4c722d60a61)
print(':'.join(a+b for a,b in zip(a[::2],a[1::2]))[3:])