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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: кодировка QIBASE  (Прочитано 15690 раз)
crossly
Гость
« Ответ #15 : Октябрь 08, 2010, 12:33 »

QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf8")); прописал такой вариант, русские буквы не отображаются
если вы имеете в виду эту пробу... то не правильно... обратите внимание как правильно кодировка называется...
Записан
Andrey.D
Гость
« Ответ #16 : Октябрь 08, 2010, 12:37 »

QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")) вписал это, тоже самое, вижу ���� вместо русских букв.
Записан
crossly
Гость
« Ответ #17 : Октябрь 08, 2010, 12:42 »

вы что то однозначно не правильно делаете если и вас на разных кодировках одно и тоже...
Записан
Andrey.D
Гость
« Ответ #18 : Октябрь 08, 2010, 12:50 »

1. В базе данных строка DEFAULT CHARACTER SET NONE, т.е. была установлена кодировка по умолчанию.
2. Подключаюсь к базе данных без указания каких-либо setConnectOptions().
3. В main.cpp прописываю
Код:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
или
Код:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));
    QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
и всегда получаю на выходе ���� вместо русских букв
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #19 : Октябрь 09, 2010, 18:36 »

>>1. В базе данных строка DEFAULT CHARACTER SET NONE, т.е. была установлена кодировка по умолчанию.
А какая кодировка по умолчанию?
Записан

Юра.
Andrey.D
Гость
« Ответ #20 : Октябрь 09, 2010, 21:25 »

В том то и дело что не знаю какая кодировка там по умолчанию если NONE
Записан
z11t3
Гость
« Ответ #21 : Октябрь 11, 2010, 10:25 »

Какая кодировка в базе - можно посмотреть в самой базе.
если разговор например о MySQL, то поможет такой запрос, который настроит кодировку на стороне СУБД для данной сессии
Цитировать
sqlQuery.prepare("SET NAMES 'utf8'");
ну или вездесущий 'cp1251'
Записан
crossly
Гость
« Ответ #22 : Октябрь 11, 2010, 17:41 »

какая версия firebird ??
Записан
Andrey.D
Гость
« Ответ #23 : Октябрь 14, 2010, 11:50 »

firebird версии 2.1, проблема была решена, использованием драйвера QFIREBIRD
Записан
Andrey.D
Гость
« Ответ #24 : Февраль 06, 2012, 08:59 »

Вернулся к проблеме с кодировкой в QIBASE.
В настройках подключения прописал ibase.setConnectOptions("ISC_DPB_LC_CTYPE=Latin1"); (кодировка базы NONE)
Если считывать данные из базы в файл, при этом выполняя перекодировку QString с помощью toStdString(), то русские буквы читаются замечательно.
Но если выводить в TableView, то все русские буквы искажаются до неузнаваемости.
Изменять кодировку базы не представляется возможным.
Может кто подскажет вариант, как побороть эту проблему?
P/S работаю под windows
Записан
Tonal
Гость
« Ответ #25 : Февраль 06, 2012, 11:53 »

Кодировка NONE указывает Firebird-у что клиент сам будет заниматься конвертацией.
Соответственно с сервера приходят строки именно в том виде как хранятся.
На клиенте, оно должно конвертироватся в кодировку указанную параметром ISC_DPB_LC_CTYPE или из utf8 если не задано.
И тут - облом: русская виндовая кодировка в Qt4 называется windows-1251, а на сервере win1251.
Т. е. если укажешь Qt-шную - сервер отфутболит, а ежели серверную - Qt возмутится...

А вот при указании Latin1 сервер перекодировки не производит, а клиент, похоже, производит только примитивное расширение каждого символа, поэтому после toStdString у нас получается std::string с символами в виндово-русской кодировке.
Т. е. для использования этой строки далее как QString её нужно конвертнуть стандартным кодеком QTextCodec::codecForName("Windows-1251")->toUnicode.

Для этого можно переопределить метод модели или ещё кого - решай сам по месту.

П. С. А что не устроило с QFIREBIRD?
Записан
Andrey.D
Гость
« Ответ #26 : Февраль 06, 2012, 12:06 »

Спасибо за полный ответ =)
QFIREBIRD не получается пока одцепить почему-то, копирую скачанные драйвера с http://code.google.com/p/qtfirebirdibppsqldriver/ в директорию QtSDK\Desktop\Qt\4.8.0\mingw\plugins\sqldrivers\, но драйвер так и не подключается.
Записан
Виктор
Гость
« Ответ #27 : Март 09, 2012, 04:30 »

Кодировка NONE указывает Firebird-у что клиент сам будет заниматься конвертацией.
Соответственно с сервера приходят строки именно в том виде как хранятся.
На клиенте, оно должно конвертироватся в кодировку указанную параметром ISC_DPB_LC_CTYPE или из utf8 если не задано.
И тут - облом: русская виндовая кодировка в Qt4 называется windows-1251, а на сервере win1251.
Т. е. если укажешь Qt-шную - сервер отфутболит, а ежели серверную - Qt возмутится...

А вот при указании Latin1 сервер перекодировки не производит, а клиент, похоже, производит только примитивное расширение каждого символа, поэтому после toStdString у нас получается std::string с символами в виндово-русской кодировке.
Т. е. для использования этой строки далее как QString её нужно конвертнуть стандартным кодеком QTextCodec::codecForName("Windows-1251")->toUnicode.

QTextCodec::codecForName("Latin1") использовать?
 
Записан
Виктор
Гость
« Ответ #28 : Март 09, 2012, 14:13 »

все,решил.сразу не понял.спасибо за информацию.
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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