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 ?