Robię niektóre skrypty w Pythonie. Tworzę ciąg znaków, który zapisuję w pliku. Ten ciąg ma wiele danych, pochodzących z arborecencji i nazw plików katalogu. Zgodnie z convmv, wszystkie moje arbrescence jest w UTF-8.Python kodowanie 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 pewien problem z niektórymi znakami (jak é lub è - Jestem Francuzem).
Chcę, aby ten python zawsze używał ciągu znaków jako UTF-8. Czytałem trochę informacji w Internecie i to mi się podobało.
Mój skrypt zacząć z tym:
#!/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!
I kiedy wykonać, oto odpowiedź: UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 2171: ordinal not in range(128)
Edit: widzę, w moim pliku, akcent są ładnie napisany. Po utworzeniu tego pliku, czytam go i zapisuję go w MySQL. Ale nie rozumiem, dlaczego, ale mam problem z kodowaniem. Moja baza danych MySQL jest w utf8 lub wydaje się być zapytaniem SQL SHOW variables LIKE 'char%'
zwraca mi tylko utf8 lub 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')
I artysty, którzy są ładnie wyświetlane w pliku pisze złe w BDD. Na czym polega problem?
Twój przykładowy kod Pythona jest nieprawidłowy; występują błędy składniowe w co najmniej 2 miejscach. Czy możesz to naprawić najpierw? –
Czy zapisujesz plik jako utf-8, a nie jako plik ASCII? – QuentinUK