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 ?