¿Cómo arreglar la encoding utf-8 rota en Python?

Mi cadena es Niệm Bồ Tát (Thiá»n sÆ° Nhất Hạnh) y quiero decodificarlo a Niệm Bồ Tát (Thiền sư Nhất Hạnh) . Veo que en ese sitio puedo hacer eso http://www.enderminh.com/minh/utf8-to-unicode-converter.aspx

y empiezo a probar por Python

 mystr = '09. Bát Nhã Tâm Kinh' mystr.decode('utf-8') 

pero en realidad no es correcto porque la cadena original es utf-8, pero el resultado de la cadena no es el esperado.

Nota: es el carácter vietnamita.

¿Cómo resolver ese caso? ¿Es eso Windows Unicode o algo así? Cómo detectar la encoding aquí.

No estoy seguro de qué puede hacer con este tipo de datos, pero para su ejemplo en su publicación original, esto funciona:

 >>> mystr = '09. Bát Nhã Tâm Kinh' >>> s = mystr.decode('utf8').encode('latin1').decode('utf8') >>> s u'09. B\xe1t Nh\xe3 T\xe2m Kinh' >>> print(s) 09. Bát Nhã Tâm Kinh 

Lo único que me ayudó con una cadena cirílica rota – https://github.com/LuminosoInsight/python-ftfy

Este módulo corrige casi todo y funciona mucho mejor que los decodificadores en línea.

 >>> from ftfy import fix_encoding >>> mystr = '09. Bát Nhã Tâm Kinh' >>> fix_encoding(mystr) '09. Bát Nhã Tâm Kinh' 

Se puede instalar fácilmente usando pip install ftfy