Название: кодировка QIBASE Отправлено: Andrey.D от Октябрь 07, 2010, 14:01 Есть база данных, в ней содержаться записи на русском, при отображении их в QTableView получаю ���� вместо русских букв.
Кодировку прописывал: QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251")); QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251")); Есть ли решение данной проблемы? Название: Re: кодировка QIBASE Отправлено: crossly от Октябрь 07, 2010, 14:27 в какой кодировке записи хранятся??
Название: Re: кодировка QIBASE Отправлено: Andrey.D от Октябрь 07, 2010, 14:31 Базу создавал не я к сожалению, пишу только клиент, а как определить в какой кодировке содержимое базы?
Название: Re: кодировка QIBASE Отправлено: crossly от Октябрь 07, 2010, 14:38 посмотри в rdb$database
Название: Re: кодировка QIBASE Отправлено: Andrey.D от Октябрь 08, 2010, 06:52 В таблице rdb$database, в поле RDB$CHARACTER_SET_NAME стоит NONE. Т.е. значит что используется какая-то кодировка по умолчанию?
Название: Re: кодировка QIBASE Отправлено: crossly от Октябрь 08, 2010, 09:24 я так полагаю юникод...
Название: Re: кодировка QIBASE Отправлено: Andrey.D от Октябрь 08, 2010, 09:28 QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf8")); прописал такой вариант, русские буквы не отображаются
Название: Re: кодировка QIBASE Отправлено: Andrey.D от Октябрь 08, 2010, 10:58 Перепробовал все кодировки, и никак не получается вывести в нормальном виде записи на русском, может кто уже сталкивался с этим?
Название: Re: кодировка QIBASE Отправлено: crossly от Октябрь 08, 2010, 11:01 база большая ??
Название: Re: кодировка QIBASE Отправлено: Andrey.D от Октябрь 08, 2010, 11:02 Очень большая =(
Название: Re: кодировка QIBASE Отправлено: Andrey.D от Октябрь 08, 2010, 12:04 Разобрался с одним моментом, данные читаются из бд в utf8 (скорее всего), и поэтому криво отображаются у меня, вопрос следующий как перекодировать строку из utf8 в Windows-1251?
Название: Re: кодировка QIBASE Отправлено: crossly от Октябрь 08, 2010, 12:13 а зачем.... если данные в utf то и отображай их в utf
Название: Re: кодировка QIBASE Отправлено: Andrey.D от Октябрь 08, 2010, 12:19 Я перебрал наверное все кодировки в QTextCodec::setCodecForCStrings(QTextCodec::codecForName, но данные так и не отображаются нормально... Как мне отобразить нормально utf?
Название: Re: кодировка QIBASE Отправлено: crossly от Октябрь 08, 2010, 12:27 QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
Название: Re: кодировка QIBASE Отправлено: Andrey.D от Октябрь 08, 2010, 12:31 Именно это уже пробовал, так же вижу ���� вместо русских букв.
Название: Re: кодировка QIBASE Отправлено: crossly от Октябрь 08, 2010, 12:33 QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf8")); прописал такой вариант, русские буквы не отображаются если вы имеете в виду эту пробу... то не правильно... обратите внимание как правильно кодировка называется...Название: Re: кодировка QIBASE Отправлено: Andrey.D от Октябрь 08, 2010, 12:37 QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")) вписал это, тоже самое, вижу ���� вместо русских букв.
Название: Re: кодировка QIBASE Отправлено: crossly от Октябрь 08, 2010, 12:42 вы что то однозначно не правильно делаете если и вас на разных кодировках одно и тоже...
Название: Re: кодировка QIBASE Отправлено: Andrey.D от Октябрь 08, 2010, 12:50 1. В базе данных строка DEFAULT CHARACTER SET NONE, т.е. была установлена кодировка по умолчанию.
2. Подключаюсь к базе данных без указания каких-либо setConnectOptions(). 3. В main.cpp прописываю Код: QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); Код: QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251")); Название: Re: кодировка QIBASE Отправлено: lit-uriy от Октябрь 09, 2010, 18:36 >>1. В базе данных строка DEFAULT CHARACTER SET NONE, т.е. была установлена кодировка по умолчанию.
А какая кодировка по умолчанию? Название: Re: кодировка QIBASE Отправлено: Andrey.D от Октябрь 09, 2010, 21:25 В том то и дело что не знаю какая кодировка там по умолчанию если NONE
Название: Re: кодировка QIBASE Отправлено: z11t3 от Октябрь 11, 2010, 10:25 Какая кодировка в базе - можно посмотреть в самой базе.
если разговор например о MySQL, то поможет такой запрос, который настроит кодировку на стороне СУБД для данной сессии Цитировать sqlQuery.prepare("SET NAMES 'utf8'"); ну или вездесущий 'cp1251'Название: Re: кодировка QIBASE Отправлено: crossly от Октябрь 11, 2010, 17:41 какая версия firebird ??
Название: Re: кодировка QIBASE Отправлено: Andrey.D от Октябрь 14, 2010, 11:50 firebird версии 2.1, проблема была решена, использованием драйвера QFIREBIRD
Название: Re: кодировка QIBASE Отправлено: Andrey.D от Февраль 06, 2012, 08:59 Вернулся к проблеме с кодировкой в QIBASE.
В настройках подключения прописал ibase.setConnectOptions("ISC_DPB_LC_CTYPE=Latin1"); (кодировка базы NONE) Если считывать данные из базы в файл, при этом выполняя перекодировку QString с помощью toStdString(), то русские буквы читаются замечательно. Но если выводить в TableView, то все русские буквы искажаются до неузнаваемости. Изменять кодировку базы не представляется возможным. Может кто подскажет вариант, как побороть эту проблему? P/S работаю под windows Название: Re: кодировка QIBASE Отправлено: Tonal от Февраль 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? Название: Re: кодировка QIBASE Отправлено: Andrey.D от Февраль 06, 2012, 12:06 Спасибо за полный ответ =)
QFIREBIRD не получается пока одцепить почему-то, копирую скачанные драйвера с http://code.google.com/p/qtfirebirdibppsqldriver/ (http://code.google.com/p/qtfirebirdibppsqldriver/) в директорию QtSDK\Desktop\Qt\4.8.0\mingw\plugins\sqldrivers\, но драйвер так и не подключается. Название: Re: кодировка QIBASE Отправлено: Виктор от Март 09, 2012, 04:30 Кодировка NONE указывает Firebird-у что клиент сам будет заниматься конвертацией. QTextCodec::codecForName("Latin1") использовать?Соответственно с сервера приходят строки именно в том виде как хранятся. На клиенте, оно должно конвертироватся в кодировку указанную параметром ISC_DPB_LC_CTYPE или из utf8 если не задано. И тут - облом: русская виндовая кодировка в Qt4 называется windows-1251, а на сервере win1251. Т. е. если укажешь Qt-шную - сервер отфутболит, а ежели серверную - Qt возмутится... А вот при указании Latin1 сервер перекодировки не производит, а клиент, похоже, производит только примитивное расширение каждого символа, поэтому после toStdString у нас получается std::string с символами в виндово-русской кодировке. Т. е. для использования этой строки далее как QString её нужно конвертнуть стандартным кодеком QTextCodec::codecForName("Windows-1251")->toUnicode. Название: Re: кодировка QIBASE Отправлено: Виктор от Март 09, 2012, 14:13 все,решил.сразу не понял.спасибо за информацию.
|