1
|
Програмиране / Общ форум / Re: Qt4 win32-g++ къде по <цензурирано> бъркам ..
|
-: Feb 20, 2009, 13:52
|
Де да беше ... В момента съм на виста хоум, специално за тестове изсипах едно чисто XP, тествано и на лаптопа с легално XP и без съмнения за проблеми със шрифтовете ... По принцип мразя да търся помощ за решение на проблемите ми и преди да стигна до това положение правя каквото е възможно, за да стигна соло до решението, с компове се занимавам сериозно от 1989-та (това просто за инфо, да не се лъжеш по пресния ми акаунт тук) и май за сефте ми се налага да ескалирам въпрос извън приятелския ми кръг... Въртял съм го с какви ли не идеи преди да постна въпросите тук ..
Поздрави,
п.с. В момента вдигам от нула нова щайга и ще изкомпилясам всичко ръчно от мингв-то нагоре, ще видя на чиста моя компилация какво ще излезе ... До тук ползвах байнъри пакетите на тролтеч и само компилирах драйвера на mysql-а ...
|
|
|
2
|
Програмиране / Общ форум / Re: Qt4 win32-g++ къде по <цензурирано> бъркам ..
|
-: Feb 20, 2009, 12:36
|
Аз продължавам да дебъгвам ... #if (MYSQL_VERSION_ID >= 40113 && MYSQL_VERSION_ID < 50000) || MYSQL_VERSION_ID >= 50007 // force the communication to be utf8 mysql_set_character_set(d->mysql, "utf8"); #endif това е парче от open() на драйвера, при моята версия комуникацията винаги е юникод ... Коректно се сетва, коректно се задавя и кодека ...
Проблема определено не е от сървъра, спретнах набързо едно пхп което го вади коректно ... Интересното е, че току-що го тествах със sqlbrowser-а от демотата на Qt, ефекта е умопомрачително еднакъв ... Явно проблема е някъде в драйвера, сядам да копая по сериозно там ...
|
|
|
3
|
Програмиране / Общ форум / Re: Qt4 win32-g++ къде по <цензурирано> бъркам ..
|
-: Feb 20, 2009, 11:48
|
qt 4.4.3, mysql 5.0.67 Default за сървъра навсякъде вече utf8 Компилацията: g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT - DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_DLL -DQT_PLUGIN -DQT_SQL_LIB - DQT_CORE_LIB -DQT_THREAD_SUPPORT Това set names utf8 се появи по трасето със сляпото налучкване, ефекта от него е никакъв, току-що тествах и без него ... Нещо ме навежда на мисълта за проблеми с утф-а в комбо бокса, резултата от .toUtf8 в него подозрително прилича на опит да дисплейне utf-а в нещо друго ... (ÐÐаЫÐж копи-пейст от бокса) ето ги и резултатите от конверсиите: чистия стринг:ЄЁаЁ«Ёж toLocal8Bit: ª¨à¨«¨æ toLatin1:  ?«?? utf-a го има по горе .. Но си признавам, че вече гадая, логичните ми идеи май се изчерпаха. Поздрави,
|
|
|
4
|
Програмиране / Общ форум / Re: Qt4 win32-g++ къде по <цензурирано> бъркам ..
|
-: Feb 20, 2009, 08:31
|
Почвам наред: Отварянето на базата - стандартно до болка:
QSqlError err; QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL", QString("XXX")); db.setHostName(dbhost); db.setUserName(dbuser); db.setPassword(dbpass); db.setDatabaseName(dbname); if (!db.open()) { err = db.lastError(); db = QSqlDatabase(); QSqlDatabase::removeDatabase(QString("XXX")); } db.exec("set names utf8");
Пълненето на комбото става в коструктора на наследен от QComboBox клас: db=QSqlDatabase::database("XXX"); this->setInsertPolicy(QComboBox::InsertAlphabetically); QSqlQuery query (db); query.exec("select cdname from cards"); if (query.isActive()) { this->addItem(""); while (query.next()) { QString string = query.value(0).toString(); this->addItem(string); this->addItem(string.toLocal8Bit()); this->addItem(string.toUtf8()); } } this->setAutoCompletion(true);
Както се забелязва, накрая тръгнах и с рогата напред, вкарвам стринга с 3 различни енкодинга ... Разликата е само във вида на маймуните в интерфейса.
Самата база: mysql> show create database gym; +----------+--------------------------------------------------------------+ | Database | Create Database | +----------+--------------------------------------------------------------+ |XXX | CREATE DATABASE `XXX` /*!40100 DEFAULT CHARACTER SET utf8 */ | +----------+--------------------------------------------------------------+ 1 row in set (0.09 sec)
резултата от show create table cards; | cards | CREATE TABLE `cards` ( `cdid` int(11) NOT NULL auto_increment, `cdname` varchar(45) character set utf8 collate utf8_unicode_ci NOT NULL, `cdcardtype` int(11) default NULL, PRIMARY KEY (`cdid`), UNIQUE KEY `idx_cdname` (`cdname`), KEY `fk_cards_cardtypes` (`cdcardtype`), CONSTRAINT `fk_cards_cardtypes` FOREIGN KEY (`cdcardtype`) REFERENCES `cardtyp es` (`ctid`) ON DELETE NO ACTION ON UPDATE NO ACTION ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 |
mysql> show variables like '%character%'; +--------------------------+---------------------------------------------------------+ | Variable_name | Value | +--------------------------+---------------------------------------------------------+ | character_set_client | cp1251 | | character_set_connection | cp1251 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | cp1251 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | C:\Program Files\MySQL\MySQL Server 5.0\share\charsets\ | +--------------------------+---------------------------------------------------------+
и последно: mysql> select * from cards; +------+----------+------------+ | cdid | cdname | cdcardtype | +------+----------+------------+ | 3 | кирилица | 1 | +------+----------+------------+ 1 row in set (0.00 sec)
insert-а по последното е направен от конзола на бсд с utf-8 локал, както се забелязва mysql-а безгрижно си работи с него и го прехвърля в каквото му трябва. Пробвах и с пачнат драйвер: qsql_mysql.cpp: static QTextCodec* codec(MYSQL* mysql) { #if MYSQL_VERSION_ID >= 40113 mysql_set_character_set(mysql, "utf8"); return QTextCodec::codecForName("utf8"); #endif ... Резултат от пача - нулев :>
дъмп=а на show variables like '%character%' от сорса дава utf8 навсякъде, с изключение на character_set_server, там си е latin1 ... Това и при пачнатия, и при чистия драйвер ...
QLocale дава Bulgaria, Bulgarian за локала както на main window-а, така и на комбото ...
На теория трябва да работи ... е явно съчетавам теорията с практиката, нищо не бачка и идея си нямам от какво :> Благодаря предварително.
|
|
|
5
|
Програмиране / Общ форум / Re: Qt4 win32-g++ къде по <цензурирано> бъркам ..
|
-: Feb 19, 2009, 16:46
|
Locale е сетнато като хората навсякъде, проверено неколкократно преди да постна въпроса ... с fromLocal8Bit нещата минаха, но това, от където стигнах до този проблем още не мога да го подкарам ... Основния проблем - QComboBox се пълни от mysql база данни, кирилицата там си е наред - базата е utf8, всичко е вкарано коректно ... Посмъртно не мога да го накарам обаче да я вкара в читав вид в комбо бокса. До тук тествани какви ли не игри с QTextCodec::setCodecForLocale и QTextCodec::setCodecForCStrings, единственото което се променя са вида на йероглифите ... Включително вкарване на ръчно написана кирилица от там в базата - нито влиза читаво в базата, нито може да си я прочете обратно след това като хората ... Почвам да се съмнявам в самия драйвер на mysql-а, почвам да копая натам по темата :<
|
|
|
6
|
Програмиране / Общ форум / Qt4 win32-g++ къде по <цензурирано> бъркам ..
|
-: Feb 19, 2009, 00:07
|
не съм вярвал, че ще опра до такъв проблем с Qt, но ... каквато и да е кирилица, вкарана директно в сорса, излиза в апп-а на гущери и маймуни, в момента в който мине през транслатор - всичко е наред ... Енкодинга на сорса е 1251, под FreeBSD бачка напълно коректно, опън сорс под М$ с mingw - не .. Вече съм къс от към всякакви идеи, ако и от тук не дойдат някакви ... ще се дебъгва цялото qt под windows явно ... Благодаря предварително. Поздрави,
|
|
|
|