Clarion 11-12

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
Губин Игорь
Шубуршун
Сообщения: 2731
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Благодарил (а): 9 раз
Поблагодарили: 30 раз

Clarion 11-12

Сообщение Губин Игорь »

Игорь Столяров писал(а): 12 Январь 2026, 16:10 И это - правда. Только полноценный UTF-16, а не 2-х байтовый упрощённый вариант.
Вот именно. Там много написано всякого, кроме того, насколько это будет совместимо. И в чём будет выражаться данная совместимость? В получении данных из API, без чего мы, в большинстве своём, проживём и дальше, или в чём-то полезном?
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5696
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 20 раз
Поблагодарили: 82 раза

Clarion 11-12

Сообщение finsoftrz »

Не совсем понял, чем отличается utf-16 от "упрощенного 2-х байтного варианта"? Utf-16 и есть 2-х байтный вариант представления юникода.
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3382
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 20 раз
Поблагодарили: 56 раз
Контактная информация:

Clarion 11-12

Сообщение Дед Пахом »

finsoftrz писал(а): 12 Январь 2026, 16:58 Не совсем понял, чем отличается utf-16 от "упрощенного 2-х байтного варианта"?
Вот я тоже не понимаю. Единственное, что приходит в голову, это функции типа LEN(uString) могут возвращать неверную длину строки, если в ней суррогатные (4-хбайтные) символы.
С уважением, ДП
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5696
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 20 раз
Поблагодарили: 82 раза

Clarion 11-12

Сообщение finsoftrz »

Будет зависеть от реализации len. Если учитывать суррогатные пары, то надо будет перебирать все содержимое строки, что приведет к снижению скорости работы. Как я понял, в настоящее время суррогатные пары не поддерживаются, это покрывает потребность в кодировании символов всех распространенных языков. А фраза RZ по поводу суррогатных пар означает, что при необходимости (если многим надо будет) они реализуют это.
Я тут подумал, а может вообще нет никакого ustring, это только roadmap. А мы кинулись обсуждать. :idied:
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8385
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 35 раз
Поблагодарили: 114 раз

Clarion 11-12

Сообщение Игорь Столяров »

Дед Пахом писал(а): 12 Январь 2026, 17:01 Единственное, что приходит в голову, это функции типа LEN(uString) могут возвращать неверную длину строки, если в ней суррогатные (4-хбайтные) символы
Ну это меньшее из возможных зол.
Получив из внешней функции (WinAPI) данные с 4-х байтными символами - Clarion в USTRING их интерпретирует как мусор.

Мне вообще не нравится, что USTRING имеет размер. Это просто очередное натягивание совы на глобус ...
За теми, кто отстал, не возвращаться ! 🏴‍☠️ Кодекс
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3382
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 20 раз
Поблагодарили: 56 раз
Контактная информация:

Clarion 11-12

Сообщение Дед Пахом »

Игорь Столяров писал(а): 12 Январь 2026, 19:27 Получив из внешней функции (WinAPI) данные с 4-х байтными символами - Clarion в USTRING их интерпретирует как мусор.
WinAPI либо возвращают указатель на 2-хбайтовый массив, оканчивающийся на <0,0>, либо, если передать NULL в качестве указателя на массив, то возвращают длину, которую можно зарезервировать и в повторном вызове уже прочитать этот массив целиком. Не вижу проблем с реализацией USTRING.
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8385
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 35 раз
Поблагодарили: 114 раз

Clarion 11-12

Сообщение Игорь Столяров »

Дед Пахом писал(а): 12 Январь 2026, 20:32 WinAPI либо возвращают указатель на 2-хбайтовый массив
WIDE функции WinAPI возвращают указатель на строку в UTF-16.
Абсолютно нет никаких проблем получить размер ответа и принять результат - что в общем-то сейчас и делается.

Но если мы будем сразу принимать ответ UTF-16 в строку USTRING - то могут быть проблемы.
За теми, кто отстал, не возвращаться ! 🏴‍☠️ Кодекс
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3382
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 20 раз
Поблагодарили: 56 раз
Контактная информация:

Clarion 11-12

Сообщение Дед Пахом »

если ANSI-вариант SomeApiProcA возвращает указатель на строку, оканчивающуюся нулём, то мы передаём в неё ссылку на CSTRING:

Код: Выделить всё

MAP
  SomeApiProcA(*CSTRING pStr),RAW,PASCAL
END

sRef  &CSTRING
s     CSTRING)21)
CODE
SomeApiProcA(sRef)  ! а не SomeApiProcA(s)
То же самое должно быть и для USTRING:

Код: Выделить всё

MAP
  SomeApiProcW(*USTRING pStr),RAW,PASCAL
END

sRef  &USTRING
s     USTRING)21)
CODE
SomeApiProcW(sRef)  ! а не SomeApiProcW(s)
С уважением, ДП
Аватара пользователя
Губин Игорь
Шубуршун
Сообщения: 2731
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Благодарил (а): 9 раз
Поблагодарили: 30 раз

Clarion 11-12

Сообщение Губин Игорь »

Дед Пахом писал(а): 12 Январь 2026, 21:28 То же самое должно быть и для USTRING:
А вот теперь объясните, оно всего этого геморроя стоило?!
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3382
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 20 раз
Поблагодарили: 56 раз
Контактная информация:

Clarion 11-12

Сообщение Дед Пахом »

Вспоминается мем с бабкой "Нам этот ваш юникот нахой не нужон!!"
С уважением, ДП
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3382
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 20 раз
Поблагодарили: 56 раз
Контактная информация:

Clarion 11-12

Сообщение Дед Пахом »

Губин Игорь писал(а): 12 Январь 2026, 21:42 А вот теперь объясните, оно всего этого геморроя стоило?!
Для WinAPI конечно нет. А вот если файловые драйвера будут поддерживать, это другое :-)
С уважением, ДП
Аватара пользователя
Губин Игорь
Шубуршун
Сообщения: 2731
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Благодарил (а): 9 раз
Поблагодарили: 30 раз

Clarion 11-12

Сообщение Губин Игорь »

Дед Пахом писал(а): 12 Январь 2026, 21:52 А вот если файловые драйвера будут поддерживать, это другое
Пока не знаю нафига мне это...
Это я только кажусь дураком! На самом деле я полный идиот!
kreator
✯ Ветеран ✯
Сообщения: 5265
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 27 раз

Clarion 11-12

Сообщение kreator »

Зачем вы обсуждаете какие-то суррогатные пары? У меня более приземлённый вопрос - какая БД поддерживает UTF-16? SQLite поддерживает! Как пишут - не совсем полноценно, но у SQLite всё так (шутка).
We are hard at work… for you. :)
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3382
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 20 раз
Поблагодарили: 56 раз
Контактная информация:

Clarion 11-12

Сообщение Дед Пахом »

Драйвер (в теории) должен преобразовывать строку UTF-16 в UTF-8 на лету, прозрачно для нас. То есть к примеру есть таблица

Код: Выделить всё

MyFile  FILE, DRIVER...
Record  RECORD
Id  LONG
Name USTRING
END
то ADD(MyFile) должен корректно передать юникод на сервер, в нужной кодировке.
С уважением, ДП
Ответить