2010-07-19 27 views
21

In Python 2, die hexadezimale Form einer Zeichenkette in die entsprechenden Unicode-Umwandlung war einfach:Decode Hex String in Python 3

comments.decode("hex") 

wo die Variable 'Kommentare' einen Teil einer Zeile in einer Datei ist (der Rest der Zeile muss nicht konvertiert werden, da es nur in ASCII dargestellt wird

Jetzt in Python 3 jedoch funktioniert das nicht (ich nehme an, wegen der Bytes/Zeichenfolge im Vergleich zu Zeichenfolge Ich glaube, es sollte in Python 3 ein One-Liner geben, um dasselbe zu tun, anstatt die gesamte Zeile als Se zu lesen ries von Bytes (was ich nicht tun möchte) und dann jeden Teil der Zeile separat konvertieren. Wenn es möglich ist, möchte ich die gesamte Zeile als Unicode-String lesen (weil der Rest der Zeile in Unicode ist) und nur diesen einen Teil von einer Hexadezimaldarstellung konvertieren.

Antwort

40

Etwas wie:

>>> bytes.fromhex('4a4b4c').decode('utf-8') 
'JKL' 

nur die eigentliche Codierung setzen Sie verwenden.

+0

Wenn die decodierte Zeichenfolge * eigentlich nicht utf-8 ist, würde ich stattdessen 'decode ('ascii')' 'empfehlen. –

+3

was wäre, wenn es im Format \ x6b \ x61 \ x6d \ x69 wäre –

1
import codecs 

decode_hex = codecs.getdecoder("hex_codec") 

# for an array 
msgs = [decode_hex(msg)[0] for msg in msgs] 

# for a string 
string = decode_hex(string)[0]