Python-Codierung utf-8
Ich mache einige Skripte in Python. Ich erstelle eine Zeichenfolge, die ich in einer Datei speichere. Diese Zeichenfolge enthält viele Daten, die aus der Arboreszenz und den Dateinamen eines Verzeichnisses stammen. Laut convmv ist meine gesamte Arboreszenz in UTF-8.
Ich möchte alles in UTF-8 behalten, da ich es danach in MySQL speichern werde. Im Moment habe ich in MySQL, das sich in UTF-8 befindet, ein Problem mit einigen Zeichen (wie é oder è - I'm French).
Ich möchte, dass Python immer Zeichenfolgen als UTF-8 verwendet. Ich habe einige Informationen im Internet gelesen und es hat mir gefallen.
Mein Drehbuch beginnt damit:
#!/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!
Und wenn ich ausführe, ist hier die Antwort:UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 2171: ordinal not in range(128)
Bearbeiten: Ich sehe, in meiner Datei sind die Akzente schön geschrieben. Nachdem ich diese Datei erstellt habe, lese ich sie und schreibe sie in MySQL. Aber ich verstehe nicht warum, aber ich habe ein Problem mit der Codierung. Meine MySQL-Datenbank ist in utf8 oder scheint eine SQL-Abfrage zu seinSHOW variables LIKE 'char%'
Gibt mir nur utf8 oder binär zurück.
Meine Funktion sieht so aus:
#!/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')
Und Künstler, die schön in der Datei angezeigt werden, schreiben schlecht in die BDD. Worin besteht das Problem ?