Estoy tratando de convertir una cadena de bytes entrantes que contiene caracteres no ascii en una cadena utf-8 válida, de modo que pueda volcar como json.cadena de bytes python codificar y decodificar
b = '\x80'
u8 = b.encode('utf-8')
j = json.dumps(u8)
que esperaba j sea '\ xc2 \ x80' pero en cambio me sale:
UnicodeDecodeError: 'ascii' codec can't decode byte 0x80 in position 0: ordinal not in range(128)
En mi situación, 'b' viene de MySQL a través de Google búferes de protocolo y se rellena con algunos datos de blobs.
¿Alguna idea?
EDIT: Tengo marcos de ethernet que están almacenados en una tabla mysql como blob (por favor, todos, quédense en el tema y eviten discutir por qué hay paquetes en una tabla). La intercalación de tablas es utf-8 y la capa db (sqlalchemy, non-orm) está tomando los datos y creando estructuras (búferes de protocolo de Google) que almacenan el blob como un 'str' de python. En algunos casos, uso los búferes de protocolo directamente sin ningún problema. En otros casos, necesito exponer los mismos datos a través de json. Lo que noté es que cuando json.dumps() hace lo suyo, '\ x80' puede reemplazarse con el carácter no gráfico no válido (\ ufffd iirc)
Necesita dar un fragmento de código que muestre lo que significa "usar los búferes de protocolo directamente sin ningún problema". Necesita mostrar con un fragmento de código lo que hace con el búfer de protocolo para hacer que 'json.dumps' produzca \ ufffd. Necesita decir exactamente qué se espera que haga el consumidor de este paquete JSONised para recuperar el paquete original. –