Estoy trabajando en un proyecto python en 2.6 que también tiene soporte futuro para python 3 en el que se está trabajando. Específicamente, estoy trabajando en un algoritmo digest-md5.Python: concatenando bytes con una cadena
en Python 2.6, sin correr esta importación:
from __future__ import unicode_literals
soy capaz de escribir una pieza de código como este:
a1 = hashlib.md5("%s:%s:%s" % (self.username, self.domain, self.password)).digest()
a1 = "%s:%s:%s" %(a1, challenge["nonce"], cnonce)
sin ningún problema, mi autenticación funciona bien. Cuando trato de la misma línea de código con los unicode_literals importados consigo una excepción:
UnicodeDecodeError: códec 'utf8' no puede decodificar 0xa8 byte en la posición 0: byte de código inesperada
Ahora estoy relativamente nuevo a Python, así que estoy un poco atrapado en resolver esto. si reemplazo el% s en la cadena de formato como% r, puedo concatenar la cadena, pero la autenticación no funciona. La especificación de digest-md5 que leí dice que el resumen binario de 16 octetos debe adjuntarse a estas otras cadenas.
¿Alguna idea?
Python 3.x separa claramente las cadenas de las matrices de bytes. Dependiendo de sus necesidades, * podría * trabajar para anteponer los patrones '"% s:% s:% s "' con 'b' para obtener una matriz de bytes, pero eso bien podría dar los resultados incorrectos. ¿Cuál es el propósito de este código de todos modos? – Philipp
Este es un fragmento de un código más grande que se utiliza para un algoritmo de digest-md5 que estoy utilizando para autenticar contra un servidor xmpp, y esta es la pieza específica de código que me está causando algunos problemas. Pendiente de la cadena de formato con b sigue causando el mismo problema. Aquí hay más información sobre cómo crear un digest-md5 http://web.archive.org/web/20050224191820/http://cataclysm.cx/wip/digest-md5-crash.html – Macdiesel