Python 2.7: cómo convertir escapes Unicode en una cadena en caracteres utf-8 reales

Uso Python 2.7 y recibo una cadena de un servidor (¡no en Unicode!). Dentro de esa cadena encuentro texto con secuencias de escape de Unicode. Por ejemplo como este:

\u00b2 

¿Cómo convierto esos \uxxxx – de vuelta a utf-8? Las respuestas que encontré trataban con &# o con eval() que es demasiado lento para mis propósitos. Necesito una solución universal para cualquier texto que contenga tales secuencias.

Edición: es un error tipográfico, pero también quiero una tolerancia contra dichos errores tipográficos. Solo debe haber reacción a \u

El texto de ejemplo se entiende en la syntax de python correcta de esta manera:

 "\\u00b2" 

La salida deseada está en la syntax de Python apropiada

 "\xc2\xb2" 

Python contiene algunos códecs de cadena especiales para casos como este.

En este caso, si no hay otros caracteres fuera del rango de 32-127, puede decodificar su cadena de bytes con seguridad usando el códec “unicode_escape” para tener un objeto de texto Unicode adecuado en Python. (En el que su progtwig debe realizar todas las operaciones de texto) – Cada vez que vuelva a enviar ese texto, lo convierte a utf-8 como de costumbre:

 rawtext = r"""\u00b2<\a>""" text = rawtext.decode("unicode_escape") # Text operations go here ... output_text = text.encode("utf-8") 

Si hay otros bytes fuera del rango de 32-127, el códec de unicode_escape asume que están en la encoding latin1. Entonces, si su respuesta mezcla utf-8 y estas secuencias \ uXXXX, debe:

  1. descifra la cadena original usando utf-8
  2. codificar de nuevo a latin1
  3. decodificar utilizando “unicode_escape”
  4. trabajar en el texto
  5. codificar de nuevo a utf-8