python kodujący utf-8
Robię kilka skryptów w Pythonie. Tworzę ciąg, który zapisuję w pliku. Ten ciąg dostał wiele danych pochodzących z arborescence i nazw plików katalogu. Według convmv, cała moja arborecencja jest w UTF-8.
Chcę zachować wszystko w UTF-8, ponieważ zapiszę go w MySQL po. Na razie w MySQL, który jest w UTF-8, mam pewne problemy z niektórymi znakami (jak é lub è - I'am French).
Chcę, aby ten python zawsze używał łańcucha jako UTF-8. Czytałem informacje w Internecie i podobało mi się to.
Mój skrypt zaczyna się od tego:
#!/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!
A kiedy wykonam, oto odpowiedź:UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 2171: ordinal not in range(128)
Edytuj: Widzę, że w moim pliku akcent jest dobrze napisany. Po utworzeniu tego pliku czytam go i zapisuję w MySQL. Ale nie rozumiem dlaczego, ale mam problem z kodowaniem. Moja baza danych MySQL znajduje się w utf8 lub wydaje się być zapytaniem SQLSHOW variables LIKE 'char%'
zwraca mi tylko utf8 lub plik binarny.
Moja funkcja wygląda tak:
#!/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')
A artyści, którzy są ładnie wyświetlani w pliku, piszą źle w BDD. Jaki jest problem ?