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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: ODBC и Oracle 10g: неверная кодировка  (Прочитано 8912 раз)
MVG-V70
Гость
« : Март 05, 2012, 15:45 »

Подключаюсь к БД Oracle 10.0.2 через ODBC. Не могу разобраться: в переменную val возвращается вместо русских букв знаки вопроса в ромбиках.

Код:
QString val;
QSqlDatabase *db = new QSqlDatabase;
*db = QSqlDatabase::addDatabase("QODBC");

db->setDatabaseName("database");
db->setUserName("username");
db->setPassword("password");

if (db->open())
{
  QSqlQuery *query = new QSqlQuery(*db);
  if (query->exec("select column from table"))
  while (query->next())
  {
    val = query->value(0).toString();
  }
}

кодировка в Oracle CL8ISO885P5. В настройках драйвера ODBC пробовал включать/выключать опцию Force SQL_WCHAR support - не помогает.
Записан
alexandros
Гость
« Ответ #1 : Март 05, 2012, 21:31 »

ну то что получаешь из базы - конвертируй, QTextCodec помоему называется класс
Записан
MVG-V70
Гость
« Ответ #2 : Март 06, 2012, 08:14 »

ну то что получаешь из базы - конвертируй, QTextCodec помоему называется класс
Искал поиском, пробовал - не получилось. Возможно делал что-то не так. Как правильно?
Записан
alexandros
Гость
« Ответ #3 : Март 08, 2012, 20:43 »

http://qt-project.org/doc/qt-4.8/qtextcodec.html

Код
C++ (Qt)
QByteArray encodedString = "...";//получаемая строка
QTextCodec *codec = QTextCodec::codecForName("KOI8-R");
QString string = codec->toUnicode(encodedString);//конвертированая
 

"KOI8-R" - вот это название кодировки может она и подойдет - если не подойдет то перебирай кодировки в документации написано

Код
C++ (Qt)
посмотри в классе QString - там тоже есть конвертация
val = query->value(0).toString().[вылезут варианты];
 
QByteArray toAscii () const
QString toCaseFolded () const
QByteArray toLatin1 () const
QByteArray toLocal8Bit () const
 

перебирай, пробуй)))
« Последнее редактирование: Март 08, 2012, 20:46 от alexandros » Записан
alexandros
Гость
« Ответ #4 : Март 08, 2012, 20:48 »

в QTextCodec есть еще функции
Код
C++ (Qt)
QString toUnicode ( const QByteArray & a ) const
QString toUnicode ( const char * input, int size, ConverterState * state = 0 ) const
QString toUnicode ( const char * chars ) const
 
Записан
MVG-V70
Гость
« Ответ #5 : Март 11, 2012, 14:17 »

Спасибо за ответ, но дело по-видимому не в кодеках.
Даже при преобразовании значения из запроса с QByteArray в отладчике видно, что там находятся только символы '?'  Обеспокоенный
Записан
Bepec
Гость
« Ответ #6 : Март 11, 2012, 14:20 »

Если ты видишь Непонимающий? это кодеки Улыбающийся
Записан
alexandros
Гость
« Ответ #7 : Март 11, 2012, 22:05 »

гугл сказал что если знаки вопроса то нужно конвертировать в юникод
Записан
MVG-V70
Гость
« Ответ #8 : Март 12, 2012, 08:04 »

Строка из четырех русских символов видна в QByteArray как четыре '?' с одним и тем же кодом. Конвертировать пробовал - не получается. Да и не должно получиться ИМХО.
Думаю, что дело в чем-то другом. Воспользовался прямым драйвером Oracle QOCI - там все в порядке.
Записан
Bepec
Гость
« Ответ #9 : Март 12, 2012, 08:27 »

Уважаемый. Не тупите пожалуйста...

У вас приходят 4 символа. Вы их видите. Вы с ними работать можете. Вы просто не можете их представить в понятном для себя виде.

А представление в понятном для вас виде, происходит с помощью кодека.

И вам уже человек 5 пишет - кодек. Вы - не, не в них дело. Это всё плохой драйвер.

PS возможно ты при приёме портишь знаки каким то своим кодеком. И в результате у тебя появляются Непонимающий? с одинаковым кодом.

Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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