Décoder la chaîne hexadécimale en Python 3

En Python 2, convertir la forme hexadécimale d'une chaîne en unicode correspondant était simple:

comments.decode("hex")

Où la variable 'comments' fait partie d'une ligne dans un fichier (le reste de la ligne ne Pas besoin d'être converti, car il est représenté uniquement en ASCII.

Maintenant, en Python 3, cependant, cela ne fonctionne pas (je suppose à cause du commutateur bytes / string vs string / unicode. Je pense qu'il devrait y avoir un one-liner dans Python 3 pour faire la même chose, plutôt que de lire la ligne entière comme une série d'octets (ce que je ne veux pas faire), puis de convertir chaque partie de la ligne séparément. Si c'est possible, je voudrais lire la ligne entière comme une chaîne unicode (parce que le reste de la ligne est en unicode) et seulement convertir cette partie à partir d'une représentation hexadécimale.

26
demandé sur chimeracoder 2010-07-19 22:44:40

2 réponses

Quelque Chose comme:

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

Il suffit de mettre l'encodage réel que vous utilisez.

51
répondu unbeli 2010-07-19 18:54:44
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]
2
répondu Niklas 2014-01-17 10:23:50