powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Firebird, Firedac и UTF8
12 сообщений из 12, страница 1 из 1
Firebird, Firedac и UTF8
    #39773196
Sinemurius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.

Столкнулся я со следующей проблемой: подключаюсь через Firedac к базе данных Firebird. У БД charset - UTF8. В настройках соединения TFDConnection - это указано.

Таблицы открываются без проблем, поля с русскими буквами отражаются нормально. Но вот поднимаю я в процедуре БД исключение с русскими буквами и отображается оно "коряво". Насколько я могу судить, это ошибка Firedac, который получает текст исключения в UTF8 формате, но думает: что это ascii и преобразовывает в unicodestring.

Частично эту проблему можно купировать примерно таким кодом:

Код: pascal
1.
2.
3.
4.
5.
6.
    try
      FDM.Query.Open;
    except
      on E: EIBNativeException do
        raise EIBNativeException.Create(UTF8ToString(TEncoding.Default.GetBytes(E.Message)));
    end;



Но помимо того, что это корявая приточка, такой код частенько обрезает часть текста.

Соответственно просьба: сталкивался ли кто нибудь с подобной ситуацией ? Есть ли какие-то мысли: как купировать такую проблему ?

Заранее спасибо.
...
Рейтинг: 0 / 0
Firebird, Firedac и UTF8
    #39773236
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это трабл в FB. Исключения не имеют кодировки. В основном рекомендуют не кидать исключения с национальными символами в тексте. Логика такая, что исключение от БД юзеру все равно нафиг не уперлось, и его надо оборачивать на клиенте.
...
Рейтинг: 0 / 0
Firebird, Firedac и UTF8
    #39773264
Sinemurius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2В основном рекомендуют не кидать исключения с национальными символами в тексте. Логика такая, что исключение от БД юзеру все равно нафиг не уперлось,

Спорный вопрос. Я люблю максимум логики закинуть в БД. Текст может быть вполне нужный юзеру, типа "Вы не можете удалять эту запись в полнолуние" или что-то в этом роде.

Василий 2Это трабл в FB. Исключения не имеют кодировки.

Вот как раз у меня получается опытным путем, что текст все таки приходит в UTF8, но преобразовывается в unicodestring так, как будто он ansi. То есть на латинский символ уходит 2 байта в E.Message, а на русский - 4 байта.
...
Рейтинг: 0 / 0
Firebird, Firedac и UTF8
    #39773267
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sinemurius...Но помимо того, что это корявая приточка...
И с FIB+ так делали, там в одном месте легко было сделать: есть компонент - централизованный обработчик... 18015826
...
Рейтинг: 0 / 0
Firebird, Firedac и UTF8
    #39773284
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13.02.2019 12:07, Sinemurius пишет:
> Вот как раз у меня получается опытным путем, что текст все таки приходит в UTF8, но преобразовывается в unicodestring так, как будто он ansi.

тряси Арефьева
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Firebird, Firedac и UTF8
    #39773360
Sinemurius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, всем.
Я решил проблему примерно таким образом:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
  if Correct_UTF8_Exception then
  begin
    try
      FDM.Query.Open;
    except
      on E: EIBNativeException
        do raise Exception.Create(UTF8ToString(RawByteString(E.Message)));
      else raise;
    end;
  end
  else FDM.Query.Open;


Тут преобразование RawByteString(E.Message) - это обратное действие. То есть по видимому UTF8 текст исключение преобразовался в unicodestring как ansistring, а потом уже RawByteString(E.Message) преобразовался обратно в UTF8.

Мимопроходящийтряси Арефьева


А кто такой Арефьев ?

Модератор: Пользуйтесь тегом (кнопкой) SRC для оформления кода, пожалуйста.
...
Рейтинг: 0 / 0
Firebird, Firedac и UTF8
    #39773362
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13.02.2019 14:10, Sinemurius пишет:
> А кто такой Арефьев ?

тот, кого нужно трясти.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Firebird, Firedac и UTF8
    #39773381
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опишите проблему в топике FireDAC .
...
Рейтинг: 0 / 0
Firebird, Firedac и UTF8
    #39773714
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SinemuriusСпорный вопрос. Я люблю максимум логики закинуть в БД. Текст может быть вполне нужный юзеру, типа "Вы не можете удалять эту запись в полнолуние" или что-то в этом роде.
Очень спорный)) понадобится текст изменить - придется в метаданные базы лезть. Выгонять юзеров, перекомпилять все ХП... Я уж не говорю про базы больше чем на одном языке.
...
Рейтинг: 0 / 0
Firebird, Firedac и UTF8
    #39773767
Sinemurius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Очень спорный)) понадобится текст изменить - придется в метаданные базы лезть. Выгонять юзеров, перекомпилять все ХП... Я уж не говорю про базы больше чем на одном языке.

А exe-шники на Delphi перекомпилировать, затем расставлять пользователям - это по Вашему меньшая проблема ?

Ну и далеко не всегда нужно выгонять пользователей.
...
Рейтинг: 0 / 0
Firebird, Firedac и UTF8
    #39773810
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SinemuriusА exe-шники на Delphi перекомпилировать, затем расставлять пользователям - это по Вашему
меньшая проблема ?

У MUI тексты не прошиты в экзешниках.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Firebird, Firedac и UTF8
    #39774161
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sinemurius,

Храни все готовые версии (+картинки, инструкции и пр.) в отдельной БД и юзерам отправляй репликацией
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Firebird, Firedac и UTF8
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]