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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Хлопцы, помогите!!! Firebird 1.5 + таб. в utf8  (Прочитано 6207 раз)
pacmanoid
Гость
« : Март 28, 2006, 18:48 »

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

не помогает.
ПОМОГИТЕ!!! :shock:
Записан
i9
Гость
« Ответ #1 : Март 28, 2006, 19:11 »

У меня именно setCodecForCStrings помогал, и если я правильно помню он помогал, если он был в самом начале main():
Код:

int main( int argc, char ** argv ){
  QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf8"));
  QApplication a( argc, argv );
  ....
}
Записан
alex0303
Гость
« Ответ #2 : Март 28, 2006, 20:35 »

А в чём проблема то?
Оно вроде с виду работает?
По крайней мере создал сейчас простенькую форму в дизайнере,
там же в превью и поглядел. И показывает русские буковки и изменяет.
БД была.

Всё это на линухе, qt 3.3.6.
Записан
i9
Гость
« Ответ #3 : Март 29, 2006, 00:04 »

Цитата: "alex0303"
А в чём проблема то?
Оно вроде с виду работает?
По крайней мере создал сейчас простенькую форму в дизайнере,
там же в превью и поглядел. И показывает русские буковки и изменяет.
БД была.
Всё это на линухе, qt 3.3.6.

А кодировка базы и локали у Вас случаем не одинаковая? То проблем конечно не заметите...
PS Еще бывает параметр в базах (не уверен на счет этой базы): "кадировка клиента" (не путать с кодировкой хранения)
Записан
pacmanoid
Гость
« Ответ #4 : Март 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 час:

 Нет, к сожалению не помогло :-(((((
Записан
Hordi
Гость
« Ответ #5 : Март 29, 2006, 09:28 »

Проще всего заставить постгрес самостоятельно перекодировать строки в нужную кодировку. Например: локаль - KOI8, база - 1251, после открытия базы выполните запрос


SET CLIENT_ENCODING TO 'KOI8'

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

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

 блин, торможу... База то Firebird... %(
Записан
alex0303
Гость
« Ответ #6 : Март 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-ам.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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