Russian Qt Forum

Qt => Базы данных => Тема начата: galeks от Февраль 09, 2011, 14:53



Название: Проблемы с отображением русского текста
Отправлено: galeks от Февраль 09, 2011, 14:53
Здравствуйте.
Имею Qt4.7 MS SQL 2005 winXP SP/3.

Подключаюсь к базе данных и формирую запрос:
Код:
QSqlDatabase  db = QSqlDatabase::addDatabase("QODBC");
    db.setDatabaseName("DRIVER={SQL Server};Server=SAPRSERVER;Database=Papka;");
    QSqlQueryModel  model;
    QTableView * tv = new QTableView();
    QString strSql;
    QSqlQuery sql;
. . . . .
    strSql = "select * from users where strLogin='"+ strLogin+"'";
    sql.exec(strSql);

создаю модель и представление:
Код:
     model.setQuery(sql);
     tv->setModel(&model);
     tv->show();
В результате на экране в таблице вместо русских символов квадратики.

Но если модель создавать другим способом:
Код:
    model.setQuery(strSql);
    tv->setModel(&model);
    tv->show();
то русские символы нормально отображаются.
Русские символы не отображаются и при попытке получить значение поля посредством:
Код:
 sql.value(1).toString();
Почему это происходит и как добиться чтобы из QSqlQuery приходили русские символы?



Название: Re: Проблемы с отображением русского текста
Отправлено: maint от Февраль 09, 2011, 18:00
ну тут вопрос интересный. В какой кодировке база ? В какой программа работает ?


Название: Re: Проблемы с отображением русского текста
Отправлено: shirushizo от Февраль 09, 2011, 19:47
Используйте методы:
Код:
QTextCodec * QTextCodec::codecForName ( const char * name )
void QTextCodec::setCodecForCStrings ( QTextCodec * codec )
void QTextCodec::setCodecForLocale ( QTextCodec * codec )
void QTextCodec::setCodecForTr ( QTextCodec * codec )

Скорее всего кодировка cp1251 базы, а исходники UTF-16.


Название: Re: Проблемы с отображением русского текста
Отправлено: galeks от Февраль 10, 2011, 08:46
Используйте методы:
Код:
QTextCodec * QTextCodec::codecForName ( const char * name )
void QTextCodec::setCodecForCStrings ( QTextCodec * codec )
void QTextCodec::setCodecForLocale ( QTextCodec * codec )
void QTextCodec::setCodecForTr ( QTextCodec * codec )

Скорее всего кодировка cp1251 базы, а исходники UTF-16.

Исходники в UTF-8, а вот база данных? Вроде MS SQL 2005 хранит данные в UCS-2.

Во всяком случае пробовал следующее:
Код
C++ (Qt)
QTextCodec * codec = QTextCodec::codecForName("UTF-8");
   QTextCodec::setCodecForCStrings (codec );
   QTextCodec::setCodecForLocale (codec );
   QTextCodec::setCodecForTr (codec );
 
Вместо названия кодека UTF-8 пробовал ставить Windows-1251, UTF-16 т.к. последний вроде прямой потомок UCS-2 и даже пробовал написать UCS-2 хоть такого названия кодека нет в QT4: http://www.doc.crossplatform.ru/qt/4.7.x/qtextcodec.html
Ситуация не изменилась.
Как выдавал знаки вопроса код:
Код
C++ (Qt)
QString strSurname = sql.value(1).toString();
qDebug()<< strSurname;
 
так и выдает.


Название: Re: Проблемы с отображением русского текста
Отправлено: maint от Февраль 10, 2011, 12:21
думаю, любой инструмент просмотра базы может дать в какой кодировке она. Ну и можно попробовать воспользоваться функциями qstring что бы попытаться увидеть кодировку. QStrind a;
qDebug() << a.toUtf8()
a.toLocal8bit


Название: Re: Проблемы с отображением русского текста
Отправлено: vvvxmag от Март 04, 2011, 07:27
Была похожая проблема

http://www.prog.org.ru/index.php?topic=17009.msg113886#msg113886