Страница 215 из 216
Clarion 11-12
Добавлено: 12 Январь 2026, 16:38
Губин Игорь
Игорь Столяров писал(а): 12 Январь 2026, 16:10
И это - правда. Только полноценный UTF-16, а не 2-х байтовый упрощённый вариант.
Вот именно. Там много написано всякого, кроме того, насколько это будет совместимо. И в чём будет выражаться данная совместимость? В получении данных из API, без чего мы, в большинстве своём, проживём и дальше, или в чём-то полезном?
Clarion 11-12
Добавлено: 12 Январь 2026, 16:58
finsoftrz
Не совсем понял, чем отличается utf-16 от "упрощенного 2-х байтного варианта"? Utf-16 и есть 2-х байтный вариант представления юникода.
Clarion 11-12
Добавлено: 12 Январь 2026, 17:01
Дед Пахом
finsoftrz писал(а): 12 Январь 2026, 16:58
Не совсем понял, чем отличается utf-16 от "упрощенного 2-х байтного варианта"?
Вот я тоже не понимаю. Единственное, что приходит в голову, это функции типа LEN(uString) могут возвращать неверную длину строки, если в ней суррогатные (4-хбайтные) символы.
Clarion 11-12
Добавлено: 12 Январь 2026, 17:42
finsoftrz
Будет зависеть от реализации len. Если учитывать суррогатные пары, то надо будет перебирать все содержимое строки, что приведет к снижению скорости работы. Как я понял, в настоящее время суррогатные пары не поддерживаются, это покрывает потребность в кодировании символов всех распространенных языков. А фраза RZ по поводу суррогатных пар означает, что при необходимости (если многим надо будет) они реализуют это.
Я тут подумал, а может вообще нет никакого ustring, это только roadmap. А мы кинулись обсуждать.

Clarion 11-12
Добавлено: 12 Январь 2026, 19:27
Игорь Столяров
Дед Пахом писал(а): 12 Январь 2026, 17:01
Единственное, что приходит в голову, это функции типа LEN(uString) могут возвращать неверную длину строки, если в ней суррогатные (4-хбайтные) символы
Ну это меньшее из возможных зол.
Получив из внешней функции (WinAPI) данные с 4-х байтными символами - Clarion в USTRING их интерпретирует как мусор.
Мне вообще не нравится, что USTRING имеет размер. Это просто очередное натягивание совы на глобус ...
Clarion 11-12
Добавлено: 12 Январь 2026, 20:32
Дед Пахом
Игорь Столяров писал(а): 12 Январь 2026, 19:27
Получив из внешней функции (WinAPI) данные с 4-х байтными символами - Clarion в USTRING их интерпретирует как мусор.
WinAPI либо возвращают указатель на 2-хбайтовый массив, оканчивающийся на <0,0>, либо, если передать NULL в качестве указателя на массив, то возвращают длину, которую можно зарезервировать и в повторном вызове уже прочитать этот массив целиком. Не вижу проблем с реализацией USTRING.
Clarion 11-12
Добавлено: 12 Январь 2026, 21:08
Игорь Столяров
Дед Пахом писал(а): 12 Январь 2026, 20:32
WinAPI либо возвращают указатель на 2-хбайтовый массив
WIDE функции WinAPI возвращают указатель на строку в UTF-16.
Абсолютно нет никаких проблем получить размер ответа и принять результат - что в общем-то сейчас и делается.
Но если мы будем сразу принимать ответ UTF-16 в строку USTRING - то могут быть проблемы.
Clarion 11-12
Добавлено: 12 Январь 2026, 21:28
Дед Пахом
если 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)
Clarion 11-12
Добавлено: 12 Январь 2026, 21:42
Губин Игорь
Дед Пахом писал(а): 12 Январь 2026, 21:28
То же самое должно быть и для USTRING:
А вот теперь объясните, оно всего этого геморроя стоило?!
Clarion 11-12
Добавлено: 12 Январь 2026, 21:46
Дед Пахом
Вспоминается мем с бабкой "Нам этот ваш юникот нахой не нужон!!"
Clarion 11-12
Добавлено: 12 Январь 2026, 21:52
Дед Пахом
Губин Игорь писал(а): 12 Январь 2026, 21:42
А вот теперь объясните, оно всего этого геморроя стоило?!
Для WinAPI конечно нет. А вот если файловые драйвера будут поддерживать, это другое

Clarion 11-12
Добавлено: 12 Январь 2026, 21:59
Губин Игорь
Дед Пахом писал(а): 12 Январь 2026, 21:52
А вот если файловые драйвера будут поддерживать, это другое
Пока не знаю нафига мне это...
Clarion 11-12
Добавлено: 12 Январь 2026, 23:33
kreator
Зачем вы обсуждаете какие-то суррогатные пары? У меня более приземлённый вопрос - какая БД поддерживает UTF-16? SQLite поддерживает! Как пишут - не совсем полноценно, но у SQLite всё так (шутка).
Clarion 11-12
Добавлено: 12 Январь 2026, 23:40
Дед Пахом
Драйвер (в теории) должен преобразовывать строку UTF-16 в UTF-8 на лету, прозрачно для нас. То есть к примеру есть таблица
Код: Выделить всё
MyFile FILE, DRIVER...
Record RECORD
Id LONG
Name USTRING
END
то ADD(MyFile) должен корректно передать юникод на сервер, в нужной кодировке.
Clarion 11-12
Добавлено: 13 Январь 2026, 7:50
Губин Игорь
Дед Пахом писал(а): 12 Январь 2026, 23:40в теории
