> > Я туда передаю нули. То есть BPB не заполняю в принципе. Я как-то > > очень давно курил этот вопрос и решил отказаться от этой заморочки. То > > бишь я закладываюсь на то, что все блобы имеют кодовую страницу > > _подключения_. > > Фигово. Т.к. кодировка подключения обычно WIN1251, и в UNICODE-поле у > тебя пишутся однобайтовые русские символы (до 2.1 перекодировки не > было). Что обработать никак низзя и что мы как раз пытаемся улучшить.
Ну да. И об этом я и написал в статье на ibase - единственный работоспособный вариант это для всех текстовых полей и блобов использовать единую кодовую страницу. В двойке вы исправили проблему связанную с обычными строками. Теперь, в 2.1, доводите до ума блобы. > > И это есть ГУД! > > Все зависит от тех, кто работает с UTF-ным чарсетом коннекта. Есть > подозрение, что могие из них пихают SQL-текст (в API-вызовы) как ANSI > вместо UTF8. Дим, ну дык это. В той же статье я написал - SQL текст тоже должен приводиться к кодовой странице подключения! Это уже сто лет назад было описано. > Я выше специально отметил - перекодировка идет *строк* (DDL-текст, > комментарии) в UNICODE. Т.к. кодировка строк определяется чарсетом > коннекта. Это понятно. > А вот кодировка блобов определяется ихним BPB. Так уж заложено > в нашем API. И если там пусто, то никакой перекодировки не будет. Т.к. > мало кто пишет именно *блобы* в RDB$SOURCE (обычно все же строки), то > это не проблема (если только с RDB$DESCRIPTION некоторые тулзы так > работают, в худшем случае). Ну я именно так и пишу текстовые блобы. То есть предполагаю - сервер ничего делать не будет. На уровне провайдера я перекодирую данные текстового блоба в чарсер_подключения и запихиваю в блоб без указания чарсета_передаваемых_данных > Но вот все читают блобы именно как блоб, не > указывая чарсет. Отчего и огребают в 2.1. Понятно. > Выход - всегда указывать > чарсет при работе с блобами, как это делает ISQL. Понятно. Раз уж вы там все ломаете в этом направлении - сделайте так, что бы имя чарсета передаваемого блоба можно было указывать в символьном виде. Или, что лучше, сделайте поддержку со стороны API, для получения имени чарсета (и этого, как его - коллэйта) из его идентификатора и наоборот. Коваленко Дмитрий.