2010-07-19 27 views
21

In Python 2, convertendo la forma esadecimale di una stringa nel corrispondente unicode era semplice:decodifica Hex stringa in Python 3

comments.decode("hex") 

dove 'commenti' la variabile è una parte di una linea in un file (il resto della linea non deve essere convertito , poiché è rappresentato solo in ASCII

Ora in Python 3, tuttavia, questo non funziona (presumo a causa dei byte/stringa vs. stringa/unicode switch Mi sembra che ci dovrebbe essere un one-liner in Python 3 per fare la stessa cosa, piuttosto che leggere l'intera riga come se fosse ries di byte (che non voglio fare) e quindi convertire ogni parte della linea separatamente. Se è possibile, mi piacerebbe leggere l'intera riga come una stringa unicode (perché il resto della riga è in unicode) e convertire solo questa parte da una rappresentazione esadecimale.

risposta

40

Qualcosa di simile:

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

appena messo il codifica reale che si sta utilizzando.

+0

A meno che la stringa decodificata * sia * in realtà utf-8, si consiglia di utilizzare invece 'decode ('ascii')'. –

+3

e se fosse nel formato di \ x6b \ x61 \ x6d \ x69 –

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]