Convertir octetos UTF-8 a puntos de código Unicode

Tengo un conjunto de octetos UTF-8 y necesito convertirlos de nuevo a puntos de código Unicode. ¿Cómo puedo hacer esto en python.

por ejemplo, el octeto UTF-8 [‘0xc5’, ‘0x81’] debe convertirse en punto de código 0x141.

Python 3.x:

En Python 3.x, str es la clase para texto Unicode y bytes para contener octetos.

Si por “octetos” realmente quiere decir cadenas en la forma ‘0xc5’ (en lugar de ‘\ xc5’), puede convertir a bytes como este:

 >>> bytes(int(x,0) for x in ['0xc5', '0x81']) b'\xc5\x81' 

Luego puedes convertir a str (es decir, Unicode) usando el constructor de str

 >>> str(b'\xc5\x81', 'utf-8') 'Ł' 

… o llamando a .decode('utf-8') en el objeto bytes :

 >>> b'\xc5\x81'.decode('utf-8') 'Ł' >>> hex(ord('Ł')) '0x141' 

Pre-3.x:

Antes de 3.x, el tipo str era una matriz de bytes, y unicode era para texto Unicode.

Nuevamente, si por “octetos” realmente quieres decir cadenas en la forma ‘0xc5’ (en lugar de ‘\ xc5’) puedes convertirlas de esta manera:

 >>> ''.join(chr(int(x,0)) for x in ['0xc5', '0x81']) '\xc5\x81' 

A continuación, puede convertir a unicode utilizando el constructor …

 >>> unicode('\xc5\x81', 'utf-8') u'\u0141' 

… o llamando a .decode('utf-8') en el str :

 >>> '\xc5\x81'.decode('utf-8') u'\u0141' 

En Lovely 3.x, donde todas las str son Unicode, y los bytes son lo que las str solían ser:

 >>> s = str(bytes([0xc5, 0x81]), 'utf-8') >>> s 'Ł' >>> ord(s) 321 >>> hex(ord(s)) '0x141' 

Que es lo que pediste.

 l = ['0xc5','0x81'] s = ''.join([chr(int(c, 16)) for c in l]).decode('utf8') s >>> u'\u0141' 
 >>> "".join((chr(int(x,16)) for x in ['0xc5','0x81'])).decode("utf8") u'\u0141'