der folgende Code:
codecs.decode(var,"hex")
in Python 2.7 Ergebnisse mit str
:
'\xdb\x91\x13%\x98\xcc\xbfv\xaef\x8bK\x08Qv\xbb\x19\'u"\x1f\xdb\xb5\x0f\xce\x1c9\'\xc0w\xea\xf1\xe3\xda\xc4\xc8\xa8\xe8\x02\x8c?r\x95\xef\x81W\xce\xd5\x97\xa3n\xf1\xc3\xbf\xa4QG{\xff2\xee\xb1\x80l,\xc0D%\x85\x19z+\xcd,C\x92\x14z\xad\xb90f\xd0\xbaZ\xb6\xdb\xfd?o\xce\xb7\x07:\xe6\x1a]J\xa8\xab\xcb\xcf\xf4\xee\xbd\x1a\x16Uh\x9b\xfd~\xab\x82\xd7{\xf7"Ou\xfb\xcd2<\x9b\x9f\xa9\xc0\xb7\xd7\x99\x18\x08x\xa8\x1d]\x07\xcf\x05\xbe9\xee\xf9\x89\xb2\xfc0w\x99},/\x11b\xe5\xb4}\x99\xe4\xb4\x15\xbc\x8c\xe5\xc7UGi1\xbd\x8e\xd1K_\xce\xc1\xc8\xc6TQYF\xabx`\xbb\xbe\xe7\xdc\xcf\xda\xa7\xaaA\x0f\xf6SR\xb1S\xb5\x87(\xd5x\x14\xc6\x10\xf8%(m\x83\x0c0\x84)\xbd\xcf\x11g\x88{\x12^\xfb/\xa3K=\xea\xcd2\x9fWgL\x07\x1b\xefl\x9c\xea\xc0\xc7\xfa\xbbXz\x1do\x8bM\x0bS'
und in Python 3.6 bytes
:
b'\xdb\x91\x13%\x98\xcc\xbfv\xaef\x8bK\x08Qv\xbb\x19\'u"\x1f\xdb\xb5\x0f\xce\x1c9\'\xc0w\xea\xf1\xe3\xda\xc4\xc8\xa8\xe8\x02\x8c?r\x95\xef\x81W\xce\xd5\x97\xa3n\xf1\xc3\xbf\xa4QG{\xff2\xee\xb1\x80l,\xc0D%\x85\x19z+\xcd,C\x92\x14z\xad\xb90f\xd0\xbaZ\xb6\xdb\xfd?o\xce\xb7\x07:\xe6\x1a]J\xa8\xab\xcb\xcf\xf4\xee\xbd\x1a\x16Uh\x9b\xfd~\xab\x82\xd7{\xf7"Ou\xfb\xcd2<\x9b\x9f\xa9\xc0\xb7\xd7\x99\x18\x08x\xa8\x1d]\x07\xcf\x05\xbe9\xee\xf9\x89\xb2\xfc0w\x99},/\x11b\xe5\xb4}\x99\xe4\xb4\x15\xbc\x8c\xe5\xc7UGi1\xbd\x8e\xd1K_\xce\xc1\xc8\xc6TQYF\xabx`\xbb\xbe\xe7\xdc\xcf\xda\xa7\xaaA\x0f\xf6SR\xb1S\xb5\x87(\xd5x\x14\xc6\x10\xf8%(m\x83\x0c0\x84)\xbd\xcf\x11g\x88{\x12^\xfb/\xa3K=\xea\xcd2\x9fWgL\x07\x1b\xefl\x9c\xea\xc0\xc7\xfa\xbbXz\x1do\x8bM\x0bS'
Der Grund hierfür ist, dass in Python 2.7
str == bytes #True
während in Python 3,6
str == bytes #False
Python 2 Strings sind Byte-Strings, während Python 3 Strings Unicode-Strings sind.Beide Ergebnisse sind tatsächlich identisch, aber die Bytezeichenfolge in Python 3 ist vom Typ bytes
nicht str
und die Literal-Darstellung hat das Präfix b
.
Dies hat nichts mit der ASCII-Codierung zu tun, da keine der Ausgabevariablen (unabhängig von der Python-Version) ASCII-codiert ist.
Außerdem auf Python 2.7 erhalten Sie auch diese Fehlermeldung erhalten:
codecs.decode(var, 'hex').decode('ascii')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xdb in position 0: ordinal not in range(128)
Ich klebte es tatsächlich aus Python 2.7 Interpreter aber Sie können selbst überprüfen.
Ihre Ausgabe-Zeichenfolge kann nicht mit ascii
Codec in einer beliebigen Version von Python decodiert werden, da es einfach nicht ascii
codierte Zeichenfolge in jedem Fall ist.
In den Kommentar zu einer der Antworten haben Sie den tatsächlichen Wert von 'var' eingefügt. Diese hexadezimale Zeichenfolge kann nicht ASCII-codiert sein, da sie Hexadezimalwerte außerhalb des ASCII-Bereichs enthält. Die Fehlermeldung ist gültig. – ElmoVanKielmo
aber mit Python 2.7.3 kann ich es mit dieser Methode konvertieren (var.decode ("hex")) – CoolNetworking
mit python 2.7.3 das ist das Ergebnis >>> var = var.decode ('hex') >>> type (var) Ich kann die Var-Ausgabe nicht als zu lange einfügen, aber es funktioniert. –
CoolNetworking