PyQT illetve PySide használatával írnék egy programot. (Nem egyszerre, hanem párhuzamosan írom mind a két widget használatával.)
Az alábbi kódrészlet betölti egy ComboBox-ba a partnerek ID-jét illetve nevét egy stringgé összefűzve.
def BetoltesPartnerek(self):
cur.execute("select * from partner")
numsorok = int(cur.rowcount)
self.comboBox_Partnerek.clear()
for i in range(numsorok):
sor = cur.fetchone()
nev=sor[1]
#nev.encode('utf-8')
self.comboBox_Partnerek.insertItem(i,str(sor[0])+": "+nev)
# self.comboBox_Partnerek.insertItem(i,str(sor[0])+": "+sor[1])
Sajnos a comboBox-ban a névben a hosszú őŐ és űŰ helyett kérdőjel jelenik meg.
A "nev" változót már azért vettem fel, hogy tudjam manipulálni mielőtt a comboboxba teszem.
Az adatok MySQL adatbázisból jönnek, ahol az adatbázis alap kódolása UTF8_hungarian_ci, de az UTF8_default_ci-ve is ugyanez volt az eredmény.
Szóval a kérdés az, hogy a comboBox-ban hogyan lehet UTF-8-as szöveget helyesen megjeleníteni, beleértve az őŐ és űŰ betűket is.?
A megoldás:
def dbNyitas(phost='localhost',puser='uszallito',ppasswd='x321',pdb='dbszallito'):
adatBazis = MySQLdb.connect(host=phost, user=puser, passwd=ppasswd, db=pdb, use_unicode=True, charset="utf8")
cur = adatBazis.cursor()
Tehát a Python MySQLdb használata esetén az adatbázis megnyitásakor explicit módon meg kell adni, hogy unikódot használunk mégpedig utf-8 kódolással!
Nekem eredetileg csak ennyi volt:
def dbNyitas(phost='localhost',puser='uszallito',ppasswd='x321',pdb='dbszallito'):
adatBazis = MySQLdb.connect(host=phost, user=puser, passwd=ppasswd, db=pdb)
cur = adatBazis.cursor()
Azaz
use_unicode=True, charset="utf8"
hiányzott és ezek szerint az alapértelmezés valami más.
A tanulság: olvassunk doksikat! http://mysql-python.sourceforge.net/MySQLdb.html