codificación de python utf-8

Estoy haciendo algunos guiones en python. Creo una cadena que guardo en un archivo. Esta cadena tiene muchos datos, provenientes de la arborescencia y los nombres de archivo de un directorio. Según convmv, todos mis arborescencias están en UTF-8.

Quiero mantener todo en UTF-8 porque lo guardaré en MySQL después. Por ahora, en MySQL, que está en UTF-8, tengo algunos problemas con algunos caracteres (como é o è - I'am French).

Quiero que Python siempre use la cadena como UTF-8. Leí algunas informaciones en internet y me gustó esto.

Mi guión comienza con esto:

 #!/usr/bin/python
 # -*- coding: utf-8 -*-
 def createIndex():
     import codecs
     toUtf8=codecs.getencoder('UTF8')
     #lot of operations & building indexSTR the string who matter
     findex=open('config/index/music_vibration_'+date+'.index','a')
     findex.write(codecs.BOM_UTF8)
     findex.write(toUtf8(indexSTR)) #this bugs!

Y cuando lo ejecuto, aquí está la respuesta:UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 2171: ordinal not in range(128)

Edit: veo, en mi archivo, el acento está muy bien escrito. Después de crear este archivo, lo leo y lo escribo en MySQL. Pero no entiendo por qué, pero tengo un problema con la codificación. Mi base de datos MySQL está en utf8, o parece ser una consulta SQLSHOW variables LIKE 'char%' Solo me devuelve utf8 o binario.

Mi función se ve así:

#!/usr/bin/python
# -*- coding: utf-8 -*-

def saveIndex(index,date):
    import MySQLdb as mdb
    import codecs

    sql = mdb.connect('localhost','admin','*******','music_vibration')
    sql.charset="utf8"
    findex=open('config/index/'+index,'r')
    lines=findex.readlines()
    for line in lines:
        if line.find('#artiste') != -1:
            artiste=line.split('[:::]')
            artiste=artiste[1].replace('\n','')

            c=sql.cursor()
            c.execute('SELECT COUNT(id) AS nbr FROM artistes WHERE nom="'+artiste+'"')
            nbr=c.fetchone()
            if nbr[0]==0:
                c=sql.cursor()
                iArt+=1
                c.execute('INSERT INTO artistes(nom,status,path) VALUES("'+artiste+'",99,"'+artiste+'/")'.encode('utf8')

Y el artista que se muestra bien en el archivo escribe mal en el BDD. Cuál es el problema ?

Respuestas a la pregunta(2)

Su respuesta a la pregunta