[pyar] Unicode, str y archivos binarios...

Alejandro Santos listas en alejolp.com
Vie Mar 15 11:52:13 ART 2013


2013/3/14 Santiago Paleka <santiagopaleka en gmail.com>:
>
> binario = ""
> binario = binario + chr(0xAA) + chr(0x04)
> nextstring = ""
> nextstring += u"áéíóú"
> binario   += chr(len(nextstring)) + nextstring
>
> UnicodeDecodeError: 'utf8' codec can't decode byte 0xaa in position 0:
> invalid start byte
>

(va de vuelta)

Acá estás concatenando una cadena "string" de bytes crudos con una
cadena Unicode, y Python está intentando promover todo el string a
Unicode, asumiendo que el string en "binario" es un UTF-8 (cosa que no
lo es). Los bytes de header que están al comienzo de "binario"
(chr(0xAA) + chr(0x04)) no representan una cadena codificada en UTF-8.

> Lo que yo quisiera, en el ejemplo anterior, es obtener en binario = 0xAA
> 0x04 0x05 0xE1 0XE9 0XED 0XF3 0XFA
>
> Espero haberme explicado medianamente bien.
> Como puedo hacer esto?
>

Si querés que la u con tilde sea 0xFA, deberías hacer:

>>> binario   += chr(len(nextstring)) + nextstring.encode("latin1")
>>> print repr(binario)
'\xaa\x04\x05\xe1\xe9\xed\xf3\xfa'

--
Alejandro Santos



More information about the pyar mailing list