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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QT MYSQL CP1251  (Прочитано 2582 раз)
DoPinG83
Гость
« : Август 08, 2011, 12:02 »

Всем привет.
Тема изъежженая, но ничего не могу поделать со своей проблемой.
Перерыл все, что возможно - ничего не помогает.

Данные по базе MYSQL:
Код:
character_set_client cp1251
character_set_connection cp1251
character_set_database cp1251
character_set_filesystem binary
character_set_results cp1251
character_set_server cp1251
character_set_system utf8
character_set_dir C:\MySQL\share\charsets\
Код подключения и запроса:
Код
C++ (Qt)
QTextCodec *codec=QTextCodec::codecForName("CP1251");
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForTr(codec);
 
QSqlDatabase db;
db = QSqlDatabase::addDatabase("QMYSQL");
db.setDatabaseName("test3");
db.setHostName("localhost");
db.setPort(-1);
 
db.open("root", "qwerty")
 
QSqlQuery query = QSqlQuery(db);
query.exec("SET NAMES CP1251");
query.exec("SELECT name FROM object_types");
 
while (query.next())
{
       QString s = query.value(0).toString();
       QString s1 = s.fromUtf8(s.toStdString().c_str());
       QString name2 = QString::fromLatin1(s.toUtf8());
       QString rname1 = tr(s.toStdString().c_str());
QString rname2 = s.fromUtf8(s.toLatin1());
QString rname3 = s.toLatin1();
QString rname4 = s.toUtf8();
QString rname5 = QTextCodec::codecForName("CP1251")->toUnicode(s.toStdString().c_str());
QString rname6 = QString::fromLatin1(s.toStdString().c_str());
char*  rname7 = s.toAscii().data();
QString rname8 = tr(s.toAscii().data());
QString name9 = QString::fromLatin1(s.toAscii());
QString name10 = QString::fromUtf8(s.toAscii());
QString name11 = tr(name10.toStdString().c_str());
}
 
Все предложенные выше варианты взятые с разных форумов выдают вместо кириллицы различную охинею типа: "�������᪨�" или "НепонимающийНепонимающийНепонимающий" или "пїЅпїЅпїЅпїЅпїЅпїЅпїЅбЄЁпїЅ" и т.п.
ПОМОГИТЕ!!! Грустный
« Последнее редактирование: Август 08, 2011, 12:06 от Пантер » Записан
Whiplash
Гость
« Ответ #1 : Август 08, 2011, 13:26 »

Попробуй посмотреть, что за байты возвращаются. Т.е. сделай так:
Код:
QByteArray ba=query.value(0).toByteArray()
и в дебаге посмотри, что из себя представляет ba.

А вообще, в наш век, когда космические корабли бороздят тропинки далёких планет довольно странно делать базу в кодировке CP1251. Познай UTF-8, и да пребудет с тобой юникод.
Записан
DoPinG83
Гость
« Ответ #2 : Август 08, 2011, 14:15 »

ba = "‘в вЁзҐбЄЁ©"

Внял твоему совету. Создал базу на utf8. Но чтобы добавить туда русские строки все-равно ведь придется делать SET NAMES cp1251? и у меня по прежнему выдаются вместо русских символов кракозябы...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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