Russian Qt Forum

Qt => Базы данных => Тема начата: DenisKh001 от Июнь 05, 2011, 13:25



Название: функция tr() и переменная QString как совместить?
Отправлено: DenisKh001 от Июнь 05, 2011, 13:25
примерно такой код:
QString f;
f = model.record(i).value(0).toString();
f = tr (f); // вот здесь конечно не соответствие типа
ui->Town->addItem(f);
Программа читает из SQLLite и вместо русских букв ромбики, что и заставило меня обратится к этой функции.


Название: Re: функция tr() и переменная QString как совместить?
Отправлено: Авварон от Июнь 05, 2011, 13:53
tr тебе не поможет и она не для этого нужна


Название: Re: функция tr() и переменная QString как совместить?
Отправлено: vincent от Июнь 05, 2011, 14:12
В общем случае - нужно знать в какой кодировке хранятся данные в БД и при получении их переводить в нужную. Желательно что бы и и БД и приложение, конечно же, разрабатывались в UTF-8  :) - меньше будет заморочек.
В отношении SQLite3 - она хранит данные в UTF-8.


Название: Re: функция tr() и переменная QString как совместить?
Отправлено: DenisKh001 от Июнь 05, 2011, 15:01
в main () написал
QTextCodec::setCodecForLocale ( QTextCodec::codecForName ( "UTF-8" ) );
QTextCodec::setCodecForCStrings ( QTextCodec::codecForName ( "UTF-8" ) );
QTextCodec::setCodecForTr ( QTextCodec::codecForName ( "UTF-8" ) );
и все равно ромбики! Куда копать-то не пойму.


Название: Re: функция tr() и переменная QString как совместить?
Отправлено: BRE от Июнь 05, 2011, 15:26
в main () написал
А для чего ты это написал? Что по твоему это делает?




Название: Re: функция tr() и переменная QString как совместить?
Отправлено: LisandreL от Июнь 05, 2011, 17:01
В отношении SQLite3 - она хранит данные в UTF-8.
1) SQLite может хранить в любой UTF кодировке (не только UTF-8, но и в UTF-16 с любым порядком байт).
2) Если б там, то Qt прочитал бы текст без проблем с любой установленной кодировкой.
Скорее всего эта база порождение очередного делфиста, который неудосужился прочесть спецификацию БД и вогнал туда текст в виндовой кодировке.
Посмотрите базу в SQLite Expert Personal. если там тоже будут ромбики - верный признак, что БД не в той кодировке.

Выход 1:
http://www.prog.org.ru/index.php?topic=18057.msg121369#msg121369

Выход 2:
Если создатель БД в вашей комманде, объяснить ему, что он чудак на букву М и заставить переписать базу в UTF.


Название: Re: функция tr() и переменная QString как совместить?
Отправлено: DenisKh001 от Июнь 05, 2011, 20:23
СПАСИБО -LisandreL!
Установил SQLite Expert Personal и действительно увидел проблему кодировки. Перебил базу и теперь все работает идеально! Заодно исчезли и многие другие необъяснимые проблемы. Изначально очень простенькая база была сделана на sqlliteadmin и в нем все было по-русски, а вот при подключении возникли проблемы кодировки.