python encodage utf-8

Je suis en train de faire quelques scripts en python. J'ai créer une chaîne que j'ai enregistrer dans un fichier. Cette chaîne a obtenu beaucoup de données, en provenance de l'arborescence et des noms de fichiers d'un répertoire.
Selon convmv, toute mon arborescence est en UTF-8.

Je veux tout garder en UTF-8, car je vais l'enregistrer dans MySQL après.
Pour l'instant, MySQL, qui est en UTF-8, j'ai eu un problème avec certains caractères (comme é ou è - je suis français).

Je veux que python toujours utiliser des chaînes de caractères en UTF-8. J'ai lu quelques infos sur internet et j'ai fait comme cela.

Mon script de commencer avec ceci :

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

Et quand j'execute, voici la réponse : UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 2171: ordinal not in range(128)

Edit:
Je vois, dans mon fichier, l'accent sont joliment écrit. Après la création de ce fichier, je l'ai lu et je l'écris dans MySQL.
Mais je ne comprends pas pourquoi, mais j'ai eu le problème avec l'encodage.
Ma base de données MySQL est en utf8, ou semble être la requête SQL SHOW variables LIKE 'char%' me renvoie seulement utf8 ou binaire.

Ma fonction ressemble à ceci :

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

Et de l'artiste qui sont bien affichées dans le fichier écrit de mauvais dans la BDD.
Quel est le problème ?

  • Votre python exemple de code n'est pas valide; il y a des erreurs de syntaxe dans au moins 2 places. Pouvez-vous résoudre ces premiers, s'il vous plaît?
  • Êtes-vous d'enregistrer le fichier en utf-8 et non pas un fichier ascii?
InformationsquelleAutor vekah | 2013-02-26