codificação python utf-8

Eu estou fazendo alguns scripts em python. Eu crio uma string que eu salvo em um arquivo. Esta cadeia de caracteres recebeu muitos dados, advindos da arborescência e nomes de arquivos de um diretório. Segundo convmv, toda minha arborescência está em UTF-8.

Eu quero manter tudo em UTF-8 porque vou salvá-lo no MySQL depois. Por enquanto, no MySQL, que está em UTF-8, tenho alguns problemas com alguns caracteres (como é ou è - I'am French).

Eu quero que o python sempre use string como UTF-8. Eu li algumas informações na internet e eu fiz assim.

Meu script começa com isso:

 #!/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!

E quando eu executo, aqui está a resposta:UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 2171: ordinal not in range(128)

Edit: Eu vejo, no meu arquivo, o sotaque é bem escrito. Depois de criar este arquivo, eu o li e o escrevi no MySQL. Mas eu não entendo porque, mas eu tenho problema com a codificação. Meu banco de dados MySQL está em utf8 ou parece ser uma consulta SQLSHOW variables LIKE 'char%' me retorna apenas utf8 ou binário.

Minha função é assim:

#!/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')

E o artista que é bem exibido no arquivo escreve mal no BDD. Qual é o problema ?

questionAnswers(2)

yourAnswerToTheQuestion