2010-07-19 21 views
21

En Python 2, conversión de la forma hexadecimal de una cadena en el Unicode correspondiente fue sencilla:Decode Hex de cadenas en Python 3

comments.decode("hex") 

donde los comentarios 'la variable es una parte de una línea en un archivo (el resto de la línea hace no necesitan ser convertidos, ya que sólo está representado en ASCII.

Ahora en Python 3, sin embargo, esto no funciona (supongo que debido a la bytes/string cadena vs./Unicode switch. Siento que debería haber una línea en Python 3 para hacer lo mismo, en lugar de leer toda la línea como una se de bytes (que no quiero hacer) y luego convertir cada parte de la línea por separado. Si es posible, me gustaría leer toda la línea como una cadena Unicode (porque el resto de la línea está en Unicode) y solo convertir esta parte de una representación hexadecimal.

Respuesta

40

Algo así como:

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

sólo hay que poner la codificación real que está utilizando.

+0

A menos que la cadena decodificada * sea * en realidad utf-8, recomendaría usar 'decode ('ascii')' en su lugar. –

+3

que pasa si tiene el formato de \ 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]