Отображение полей БД IBM Informix в кодировке UTF-8 в DBGrid

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Отображение полей БД IBM Informix в кодировке UTF-8 в DBGrid

Сообщение Vodnik » 22.10.2019 13:44:14

Добрый день!
Подключаюсь к БД Informix посредством ODBC-драйвера. В настройках драйвера есть такие строчки:
odbc.png

Проект - один-в-один SQLdb_Tutorial1 https://wiki.freepascal.org/SQLdb_Tutorial1, прилагается Test.7z.
Test.7z

Если при обращении к таблице встречается текстовое поле с кодировкой в UTF-8 (предположительно), то приложение начинает выдавать ошибки одну за другой:
err1-3.png

После всего данные в DBGrid отображаются, но без строк, содержащих кириллицу:
(больше картинок прицепить нельзя :( , продолжу в следующем сообщении)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Vodnik
новенький
 
Сообщения: 45
Зарегистрирован: 24.12.2016 01:14:23

Re: Отображение полей БД IBM Informix в кодировке UTF-8 в DB

Сообщение alexs » 22.10.2019 14:04:27

а если ClientLocale ru_RU.UTF8?
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Отображение полей БД IBM Informix в кодировке UTF-8 в DB

Сообщение Vodnik » 22.10.2019 14:34:10

alex, как раз хотел об этом сказать.
Если выставить ru-RU.UTF8, то в приложении возникает ошибка Informix "Unable to load location categories":
err4.png

Если выставить en-US.UTF8, то ошибки исчезают, записи отображаются, но в непреобразованном виде:
tables.png


Добавлено спустя 7 минут 45 секунд:
Re: Отображение полей БД IBM Informix в кодировке UTF-8 в DBGrid
На этом можно было бы успокоиться, написать обработчик GetText, но...
В БД более трёхсот таблиц с тысячами полей и мне доподлинно не известно, какие из них могут содержать кириллицу.
Неужели в Lazarus нет более красивого решения?
Мне попадалась фраза, что по умолчанию Lazarus работает с UTF-8. Что это значит? Данные отображаются так:
table.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Vodnik
новенький
 
Сообщения: 45
Зарегистрирован: 24.12.2016 01:14:23

Re: Отображение полей БД IBM Informix в кодировке UTF-8 в DB

Сообщение Снег Север » 22.10.2019 15:05:03

В этой БД не разбираюсь, но попробуйте погуглить на выданую ошибку:
Informix Client ODBC Driver Error: Unable to load locale catagoies
похоже на проблемы в настройке сервера и/или ODBC.

Лазарус-то работает в UTF-8, а вот драйвер вам дает данные в ASCII.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: Отображение полей БД IBM Informix в кодировке UTF-8 в DB

Сообщение Vodnik » 22.10.2019 16:23:44

Ну как я уже писал, если Client Locale = en-US.UTF8 в настройках драйвера ODBC, то ошибок в приложении не возникает.
И я полагаю, драйвер в этом случае должен выдавать данные в UTF8, разве нет? Это можно как-то проверить?
Vodnik
новенький
 
Сообщения: 45
Зарегистрирован: 24.12.2016 01:14:23

Re: Отображение полей БД IBM Informix в кодировке UTF-8 в DB

Сообщение alexs » 22.10.2019 16:37:15

Меня ещё смушает серверная кодировка.
Что это за en_US.819? И есть ли в ней кирилические символы?
По хорошему в БД должен быть уникод - тот-же UTF8
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Отображение полей БД IBM Informix в кодировке UTF-8 в DB

Сообщение Снег Север » 22.10.2019 16:39:14

Возможно я ошибаюсь, но по-моему en-US.UTF8 должно конвертировать симоволы английской локали в UTF8. А откуда конвертору знать, что там русский сидит?
А что прописано в серверных настройках на самом сервере?
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: Отображение полей БД IBM Informix в кодировке UTF-8 в DB

Сообщение Vadim » 22.10.2019 17:10:52

Vodnik писал(а):Неужели в Lazarus нет более красивого решения?

А при чём тут Lazarus, если прямо, чуть ли не по русски, написано, что это ошибка ODBC? :D Я не знаю, где Вы брали свой драйвер ODBC, обычно в интернетах советуют скачивать самый наипослелний IBM Informix Client SDK. Как правило это никому не помогало, поэтому поддержку конкретно русских кодировок (любых русских, специально подчёркиваю!) вводили в исходник ODBC ручками. Но поскольку это было уже давненько, возможно буржуины это дело уже поправили. Так что заходите на ихний сайт, качайте самое новьё, ставьте пробуйте... ;-)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Отображение полей БД IBM Informix в кодировке UTF-8 в DB

Сообщение Vodnik » 22.10.2019 17:18:27

alexs писал(а):Меня ещё смушает серверная кодировка.
Что это за en_US.819? И есть ли в ней кирилические символы?
По хорошему в БД должен быть уникод - тот-же UTF8


alex, полагаю, так исторически сложилось. БД разрабатывалась более 20 лет назад, относительно недавно в ней сделали поддержку кириллицы (возможно, нестандартными способами). Кодировка сервера en_US.819 выставляется драйвером по умолчанию, если ничего не указать. Если установить server locale = en_US.UTF8, то в приложении возникает ошибка ...locale mismatch.

Снег Север писал(а):А что прописано в серверных настройках на самом сервере?


Снег Север, я не знаю где это посмотреть :(

А как это всё работает в идеале - Lazarus отображает кириллицу без дополнительных процедур конвертации?
Vodnik
новенький
 
Сообщения: 45
Зарегистрирован: 24.12.2016 01:14:23

Re: Отображение полей БД IBM Informix в кодировке UTF-8 в DB

Сообщение Vadim » 22.10.2019 17:20:28

alexs писал(а):Что это за en_US.819?

Согласно IBM'овской документации - стандартный английский, аналог кодовой страницы 8859-1.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Отображение полей БД IBM Informix в кодировке UTF-8 в DB

Сообщение Снег Север » 22.10.2019 17:57:52

Vodnik писал(а):Снег Север, я не знаю где это посмотреть

У вас нет физического доступа к серверу? Там должны быть конфигурационнные файлы, где такое прописывается. Так я понял из беглого просмотра вики по IBM Informix.

Vadim писал(а):А как это всё работает в идеале - Lazarus отображает кириллицу без дополнительных процедур конвертации?

В идеале настраивается 1) на сервере 2) в драйвере 3) в коннекшене, чтобы получать правильную кодировку. И Lazarus отображает в UTF8 любой текст на любом языке.

Добавлено спустя 14 часов 21 минуту 4 секунды:
Re: Отображение полей БД IBM Informix в кодировке UTF-8 в DBGrid
Vodnik писал(а):БД разрабатывалась более 20 лет назад, относительно недавно в ней сделали поддержку кириллицы (возможно, нестандартными способами)

Опять же, не знаю конкретно про IBM Informix, но с похожим сталкивался в MySQL с неюникодовской базой, в Делфи. Там кодировка базы была latin1, а в текстовых полях сидел иврит. Единственный рабочий вариант был - в соединении использовать latin1, а в настройках винды ставить иврит для неюникодовских символов. Но правильным решением должна быть конвертация всей базы в юникодовскую, к чему, в конечном итоге, и свелось дело.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: Отображение полей БД IBM Informix в кодировке UTF-8 в DB

Сообщение Vodnik » 23.10.2019 14:51:07

Спасибо за поддержку, Снег Север!
Снег Север писал(а):У вас нет физического доступа к серверу? Там должны быть конфигурационнные файлы, где такое прописывается. Так я понял из беглого просмотра вики по IBM Informix.

Доступ есть, спасибо, буду копать, но... по условиям использования запрещено что-либо менять в БД.
Снег Север писал(а):В идеале настраивается 1) на сервере 2) в драйвере 3) в коннекшене, чтобы получать правильную кодировку. И Lazarus отображает в UTF8 любой текст на любом языке.

1 - разберусь,
2 - а что в драйвере предположительно должно быть:
Database Locale = en_US.UTF8
Client Locale = en_RU.UTF8
???
3 - речь об ODBCConnection1.CharSet=UTF8 ???
Снег Север писал(а):Опять же, не знаю конкретно про IBM Informix, но с похожим сталкивался в MySQL с неюникодовской базой, в Делфи. Там кодировка базы была latin1, а в текстовых полях сидел иврит. Единственный рабочий вариант был - в соединении использовать latin1, а в настройках винды ставить иврит для неюникодовских символов. Но правильным решением должна быть конвертация всей базы в юникодовскую, к чему, в конечном итоге, и свелось дело.

:( Упс... Добиться от разработчиков ковертации БД в юникодовскую мне вряд ли удастся. В винде для неюникодовских программ установлена кириллица. Пока добиться отображения кириллицы мне не удаётся. Написал обработчик onGetText, пробую различные функции преобразования строк типа UTF8ToWinCP, пока безуспешно.
Последний раз редактировалось Vodnik 24.10.2019 13:11:35, всего редактировалось 1 раз.
Vodnik
новенький
 
Сообщения: 45
Зарегистрирован: 24.12.2016 01:14:23

Re: Отображение полей БД IBM Informix в кодировке UTF-8 в DB

Сообщение Снег Север » 23.10.2019 17:17:38

Vodnik писал(а):предположительно должно быть

Да вот у меня есть сомнения... Тут вам поспрашивать бы у спецов именно по Informix - эти настройки имеют мало отношения к специфике Лазаруса. Возможно, что вам надо выставить всюду "родную", не юникодовскую кодировку, а отображение русского пойдет за счет настройки винды. Но это чисто предположение. Вы понимаете что происходит сейчас? То ли сервер, то ли драйвер пытаются интерпретировать русские символы, как латинские спецсимволы и такими их запихивают в UTF8. Надо или вообще не преобразовывать, или как-то указать преобразование именно с русского в юникод. Как это сделать конкретно в вашем случае - просто не знаю.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: Отображение полей БД IBM Informix в кодировке UTF-8 в DB

Сообщение Vodnik » 23.10.2019 18:40:21

Так я и собираюсь поступить.
А вот что сейчас происходит, я не совсем представляю.

Добавлено спустя 5 часов 20 минут 18 секунд:
Re: Отображение полей БД IBM Informix в кодировке UTF-8 в DBGrid
Полагаю, нужно попытаться избавиться от Лазарусовского исключения, когда он читает поле с кириллицей при дефолтных настройках ODBC:
err1-3.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Vodnik
новенький
 
Сообщения: 45
Зарегистрирован: 24.12.2016 01:14:23

Re: Отображение полей БД IBM Informix в кодировке UTF-8 в DB

Сообщение Vadim » 24.10.2019 09:12:25

Снег СеверVodnik
Граждане, что-то меня напрягать стало, что вы мне приписываете слова, которые я не говорил. Нельзя ли быть повнимательнее?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google Adsense [Bot] и гости: 27

Рейтинг@Mail.ru