Ich mache einige Skripte in Python. Ich erstelle eine Zeichenfolge, die ich in einer Datei speichern. Diese Zeichenfolge enthält viele Daten, die aus der Baumstruktur und den Dateinamen eines Verzeichnisses stammen. Laut Convmv ist alle meine Arboreszenz in UTF-8.Python-Codierung utf-8
Ich möchte alles in UTF-8 behalten, weil ich es in MySQL nach speichern werde. Für jetzt, in MySQL, die in UTF-8 ist, habe ich ein Problem mit einigen Zeichen (wie é oder è - ich bin Französisch).
Ich möchte, dass Python immer Zeichenfolge als UTF-8 verwenden. Ich habe einige Informationen im Internet gelesen und das hat mir gefallen.
Mein Skript beginnt mit diesem:
#!/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ühren, hier ist die Antwort: UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 2171: ordinal not in range(128)
Edit: Ich sehe in meiner Datei, ist der Akzent 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 SQL-Abfrage SHOW variables LIKE 'char%'
gibt mir nur UTF8 oder Binär.
Meine Funktion sieht wie folgt 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 artiste, die in der Datei schön angezeigt schreibt schlecht in die BDD. Was ist das Problem?
Ihr Python-Beispielcode ist ungültig. An mindestens 2 Stellen liegen Syntaxfehler vor. Können Sie das bitte zuerst beheben? –
Speichern Sie die Datei als utf-8 und nicht als ASCII-Datei? – QuentinUK