Russian Qt Forum
Ноябрь 24, 2024, 01:05 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблемы с отображением русского текста  (Прочитано 5541 раз)
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 приходили русские символы?

« Последнее редактирование: Февраль 09, 2011, 15:32 от galeks » Записан
maint
Гость
« Ответ #1 : Февраль 09, 2011, 18:00 »

ну тут вопрос интересный. В какой кодировке база ? В какой программа работает ?
Записан
shirushizo
Гость
« Ответ #2 : Февраль 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.
Записан
galeks
Гость
« Ответ #3 : Февраль 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;
 
так и выдает.
Записан
maint
Гость
« Ответ #4 : Февраль 10, 2011, 12:21 »

думаю, любой инструмент просмотра базы может дать в какой кодировке она. Ну и можно попробовать воспользоваться функциями qstring что бы попытаться увидеть кодировку. QStrind a;
qDebug() << a.toUtf8()
a.toLocal8bit
Записан
vvvxmag
Гость
« Ответ #5 : Март 04, 2011, 07:27 »

Была похожая проблема

http://www.prog.org.ru/index.php?topic=17009.msg113886#msg113886
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.141 секунд. Запросов: 21.