Russian Qt Forum

Qt => Базы данных => Тема начата: pacmanoid от Март 28, 2006, 18:48



Название: Хлопцы, помогите!!! Firebird 1.5 + таб. в utf8
Отправлено: pacmanoid от Март 28, 2006, 18:48
:o Хлопцы, помогите!!! Есть Firebird 1.5 на сервере и база в кодировке utf8, пишу приложение на QT3 и немогу выиащить данные. Продвигаю LINUX у себя на заводе, раньше с этой базой работало приложение написанное на C++ Builder-ре 6. Перевести базу в UTF-8 не имею права.
Читал форум, находил проблемы и их решения для MySQL, для Firebird невидел. Пробовал
QTextCodec *codec=QTextCodec::codecForName("utf8");
QTextCodec::setCodecForCStrings(codec);

не помогает.
ПОМОГИТЕ!!! :shock:


Название: Хлопцы, помогите!!! Firebird 1.5 + таб. в utf8
Отправлено: i9 от Март 28, 2006, 19:11
У меня именно setCodecForCStrings помогал, и если я правильно помню он помогал, если он был в самом начале main():
Код:

int main( int argc, char ** argv ){
  QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf8"));
  QApplication a( argc, argv );
  ....
}


Название: Хлопцы, помогите!!! Firebird 1.5 + таб. в utf8
Отправлено: alex0303 от Март 28, 2006, 20:35
А в чём проблема то?
Оно вроде с виду работает?
По крайней мере создал сейчас простенькую форму в дизайнере,
там же в превью и поглядел. И показывает русские буковки и изменяет.
БД была.

Всё это на линухе, qt 3.3.6.


Название: Хлопцы, помогите!!! Firebird 1.5 + таб. в utf8
Отправлено: i9 от Март 29, 2006, 00:04
Цитата: "alex0303"
А в чём проблема то?
Оно вроде с виду работает?
По крайней мере создал сейчас простенькую форму в дизайнере,
там же в превью и поглядел. И показывает русские буковки и изменяет.
БД была.
Всё это на линухе, qt 3.3.6.

А кодировка базы и локали у Вас случаем не одинаковая? То проблем конечно не заметите...
PS Еще бывает параметр в базах (не уверен на счет этой базы): "кадировка клиента" (не путать с кодировкой хранения)


Название: Хлопцы, помогите!!! Firebird 1.5 + таб. в utf8
Отправлено: pacmanoid от Март 29, 2006, 09:23
Цитата: "i9"
Цитата: "alex0303"
А в чём проблема то?
Оно вроде с виду работает?
По крайней мере создал сейчас простенькую форму в дизайнере,
там же в превью и поглядел. И показывает русские буковки и изменяет.
БД была.
Всё это на линухе, qt 3.3.6.

А кодировка базы и локали у Вас случаем не одинаковая? То проблем конечно не заметите...
PS Еще бывает параметр в базах (не уверен на счет этой базы): "кадировка клиента" (не путать с кодировкой хранения)
Правильно, если просто сразу базу из QT приложения забовать русскими данными то и в LINUX и в Windows эти данные корректно отображаются, так как они идут в кодировке UTF, только вот приложения типа IBExpert эти данные нихрена нормально не отображает, видимо КУТЭшное приложение приложение использует по 2 байта на символ а IBExpert интерпретирует как один байт на символ. Но с базами созданными ранее в utf8 ичего не получается.

Спасибо что откликнулись!
Сейчас попробую

int main( int argc, char ** argv ){
  QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf8"));
  QApplication a( argc, argv );
  ....
}

и посмотрю что получится.

добавлено спустя 1 час:

 Нет, к сожалению не помогло :-(((((


Название: Хлопцы, помогите!!! Firebird 1.5 + таб. в utf8
Отправлено: Hordi от Март 29, 2006, 09:28
Проще всего заставить постгрес самостоятельно перекодировать строки в нужную кодировку. Например: локаль - KOI8, база - 1251, после открытия базы выполните запрос


SET CLIENT_ENCODING TO 'KOI8'

и будет вам счастье.

добавлено спустя 52 секунды:

 блин, торможу... База то Firebird... %(


Название: Хлопцы, помогите!!! Firebird 1.5 + таб. в utf8
Отправлено: alex0303 от Март 29, 2006, 11:07
Да всё совсем не так.
У многих РСУБД (в том числе и firebird) кодировка в БД и кодировка на клиенте совсем разные вещи.
Т.е. если на клиенте Вы указали некую кодировку Х, а в БД у вас всё хранится в кодировке Y, то всё нормально работает если Вы действительно передаёте Х и принятое воспринимаете как Х, и если Х и Y "совместимы".

В драйвере QIBASE кодировка клиента прописана как UNICODE_FSS, а при передаче/приёме используется utf8()/fromUtf8(), и независимо от того как у Вас  в БД лежит (WIN1251 или UNICODE_FSS) всё работает.

Я проверял на linux-е с локалью koi8-r и БД в 1251.

добавлено спустя 1 минуту:

 И по моему пост про
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf8"));
относился к строковым BLOB-ам.