python kodujący utf-8

Robię kilka skryptów w Pythonie. Tworzę ciąg, który zapisuję w pliku. Ten ciąg dostał wiele danych pochodzących z arborescence i nazw plików katalogu. Według convmv, cała moja arborecencja jest w UTF-8.

Chcę zachować wszystko w UTF-8, ponieważ zapiszę go w MySQL po. Na razie w MySQL, który jest w UTF-8, mam pewne problemy z niektórymi znakami (jak é lub è - I'am French).

Chcę, aby ten python zawsze używał łańcucha jako UTF-8. Czytałem informacje w Internecie i podobało mi się to.

Mój skrypt zaczyna się od tego:

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

A kiedy wykonam, oto odpowiedź:UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 2171: ordinal not in range(128)

Edytuj: Widzę, że w moim pliku akcent jest dobrze napisany. Po utworzeniu tego pliku czytam go i zapisuję w MySQL. Ale nie rozumiem dlaczego, ale mam problem z kodowaniem. Moja baza danych MySQL znajduje się w utf8 lub wydaje się być zapytaniem SQLSHOW variables LIKE 'char%' zwraca mi tylko utf8 lub plik binarny.

Moja funkcja wygląda tak:

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

A artyści, którzy są ładnie wyświetlani w pliku, piszą źle w BDD. Jaki jest problem ?

questionAnswers(2)

yourAnswerToTheQuestion