Страница 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. А мы кинулись обсуждать. :idied:

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в теории
:nono: