Trabajar con cadenas codificadas en Unicode desde Active Directory a través de python-ldap

Ya se me ocurrió este problema, pero después de algunas pruebas decidí crear una nueva pregunta con algunas informaciones más específicas:

Estoy leyendo cuentas de usuario con python-ldap (y Python 2.7) de nuestro Directorio Activo. Esto funciona bien, pero tengo problemas con caracteres especiales. Se ven como cadenas codificadas en UTF-8 cuando se imprimen en la consola. El objective es escribirlos en una base de datos MySQL, pero no obtengo esas cadenas en UTF-8 desde el principio.

Ejemplo (las entradas completas son mi matriz con todas las entradas de AD):

fullentries[23][1].decode('utf-8', 'ignore') print fullentries[23][1].encode('utf-8', 'ignore') print fullentries[23][1].encode('latin1', 'ignore') print repr(fullentries[23][1]) 

Una segunda prueba con una cuerda insertada a mano de la siguiente manera:

 testentry = "M\xc3\xbcller" testentry.decode('utf-8', 'ignore') print testentry.encode('utf-8', 'ignore') print testentry.encode('latin1', 'ignore') print repr(testentry) 

La salida del primer ejemplo es:

 M\xc3\xbcller M\xc3\xbcller u'M\\xc3\\xbcller' 

Editar: si trato de reemplazar las barras invertidas dobles con .replace (‘\\\\’, ‘\\) la salida sigue siendo la misma.

La salida del segundo ejemplo:

 Müller M ller 'M\xc3\xbcller' 

¿Hay alguna manera de obtener la salida AD codificada correctamente? Ya leí mucha documentación, pero todo indica que LDAPv3 le proporciona cadenas estrictamente codificadas en UTF-8. Active Directory utiliza LDAPv3.

Mi pregunta anterior sobre este tema está aquí: Escribir la cadena UTF-8 en MySQL con Python

Edición: Añadido repr (s) infos

Primero, sepa que la print en una consola de Windows es a menudo el paso que confunde datos, por lo que para sus pruebas, debe print repr(s) para ver los bytes precisos que tiene en su cadena.

Debe averiguar cómo se codifican los datos de AD. Nuevamente, las print repr(s) le permitirán ver el contenido de los datos.

ACTUALIZADO:

De acuerdo, parece que de alguna manera te están poniendo cuerdas extrañas. Puede haber una manera de mejorarlos, pero puede adaptarse en cualquier caso, aunque no es bonito:

 u.decode('unicode_escape').encode('iso8859-1').decode('utf8') 

Es posible que desee ver si puede obtener los datos en un formato más natural.