powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Lazarus
25 сообщений из 314, страница 4 из 13
Lazarus
    #39877290
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

Трешак.
...
Рейтинг: 0 / 0
Lazarus
    #39877291
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatТрешак.
Дока.

Но если угодно, можно сказать что юникодовые состоят из двухбайтовых элементов, которые можно считать символами UCS-2.
...
Рейтинг: 0 / 0
Lazarus
    #39877293
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот, кстати, ссылочка, где прямо говорится об элементах строк: http://docwiki.embarcadero.com/RADStudio/Rio/en/Unicode_in_RAD_Studio#New_String_Type:_UnicodeString
Characters in UTF-16 may be 2 or 4 bytes, so the number of elements in a string is not necessarily equal to the number of characters. If the string has only BMP characters, the number of characters and elements are equal.
...
Рейтинг: 0 / 0
Lazarus
    #39877298
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev AlexeyНо если угодно, можно сказать что юникодовые состоят из двухбайтовых элементов, которые можно считать символами UCS-2.Меня печалит то что работа функции Length не постоянна.
Ладно бы она всегда выдавала кол-во символов, или всегда количество байт. Можно было бы писать нормальный код.
Но в текущей реализации это "скажи привет" условной компиляции и миллиону ifdef.
...
Рейтинг: 0 / 0
Lazarus
    #39877304
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat> Но в текущей реализации это "скажи привет" условной компиляции и миллиону ifdef.

Можно же свою написать, зачем директивы втыкать.

P.S. Не знал, что кто-то использует UCS.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Lazarus
    #39877306
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

rgreatЛадно бы она всегда выдавала кол-во символов
Каких символов? Нормализованных? В какой форме нормализации?

rgreatили всегда количество байт
Размер в байтах без ифдефов и условной компиляции:
Код: pascal
1.
Length(s) * SizeOf(Char)
...
Рейтинг: 0 / 0
Lazarus
    #39877313
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatKazantsev Alexey,
Что такое "элемент" строки в этом контексте?
Kazantsev Alexey,

Ну то есть сферическими конями в вакууме. Если для UTF-8 она возвращает хотя бы длину строки в байтах, то для UnicodeString она вообще бесполезна получается.
...
Рейтинг: 0 / 0
Lazarus
    #39877315
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpНу то есть сферическими конями в вакууме.
Нет.

alekcvpто для UnicodeString она вообще бесполезна получается
Почему бесполезна и чем лучше размер в байтах?
...
Рейтинг: 0 / 0
Lazarus
    #39877321
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev AlexeyПочему бесполезна и чем лучше размер в байтах?
А какой толк от функции, которая возвращает длину строки не в байтах и не в символах?..
Это как возвращать размер прямоугольника на экране не в пикселах и не в сантиметрах, а в енотах. Причём каждый енот разной длины (суррогатные пары), если тебе нужен точный размер (кол-во символов) - всё равно придётся заново линейкой померять (распарсить). А если в байтах - то зачем было на 2 умножать?
...
Рейтинг: 0 / 0
Lazarus
    #39877322
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

Кстати, про Pos() написано: Pos searches for Substr within S and returns an integer value that is the index of the first character of Substr within S. Pos is case-sensitive. If Substr is not found, Pos returns zero. Она суррогатные пары учитывает?
...
Рейтинг: 0 / 0
Lazarus
    #39877328
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpА какой толк от функции, которая возвращает длину строки не в байтах и не в символах?..
Это как возвращать размер прямоугольника на экране не в пикселах и не в сантиметрах, а в енотах. Причём каждый енот разной длины (суррогатные пары), если тебе нужен точный размер (кол-во символов) - всё равно придётся заново линейкой померять (распарсить).
Я и тебя спрошу о символах. Каких символов? Нормализованных? В какой форме нормализации? Без ответа на этот вопрос тебе даже UTF-32 не поможет.

alekcvpОна суррогатные пары учитывает?
Для подобной функции это не проблема, они будут учитываться без прилагания каких либо усилий.

И как я уже говорил, можно считать, что:
юникодовые состоят из двухбайтовых элементов, которые можно считать символами UCS-2
Если быть ещё более точным, то это кодпоинты BMP.
...
Рейтинг: 0 / 0
Lazarus
    #39877332
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexeyrgreat,

Каких символов? Нормализованных? В какой форме нормализации?
Char, SizeOf(Char)
...
Рейтинг: 0 / 0
Lazarus
    #39877336
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatChar, SizeOf(Char)
А сейчас не количество чаров возвращается?
...
Рейтинг: 0 / 0
Lazarus
    #39877345
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

Я-то откуда знаю. Я неделю на лазаре пишу.
...
Рейтинг: 0 / 0
Lazarus
    #39877347
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но судя по твоему "Writeln(Length(Utf8String('1¢'))); // displays 3" - нет.
...
Рейтинг: 0 / 0
Lazarus
    #39877350
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatНо судя по твоему "Writeln(Length(Utf8String('1¢'))); // displays 3" - нет.
Так Utf8String - это байтовая строка. С чего бы Length должна возвращать количество Char для байтовой строки???
...
Рейтинг: 0 / 0
Lazarus
    #39877362
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

Потому что UTF8 не байтовая строка. Это строка с вариативным размером char.

По законам здравого смысла Length строки должен выдавать количество символов в ней.
А s[n] возвращать символ под номером n.
...
Рейтинг: 0 / 0
Lazarus
    #39877364
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для выявления же размера в байтах по хорошему надо использовать нечто вроде System.SysUtils.ByteLength(s).
Особенно в случае UFT8 и т.п.
...
Рейтинг: 0 / 0
Lazarus
    #39877367
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatПотому что UTF8 не байтовая строка. Это строка с вариативным размером char.
Ты не фантазируй, а на декларацию типа смотри. Она байтовая.
...
Рейтинг: 0 / 0
Lazarus
    #39877370
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

Они все в памяти "байтовые".
Только суть от этого не меняется. Раз уж строка состоит из разных видов char то по этим char к ней и надо по логике вещей доступ делать.

Это будет универсально а не как нынче с зоопарком подходов.

А с байтами надо бы работать через байты а не через индекс символа в строек.
...
Рейтинг: 0 / 0
Lazarus
    #39877371
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatОни все в памяти "байтовые"
Вопрос можно было бы ставить таким образом, если бы эта адресуемость не была публичным интерфейсом. Но она такая, какая есть. Вот юникодовые строки они не байтовые, хотя "в памяти...".

rgreatРаз уж строка состоит из разных видов char
В том то и дело, что состоит она из однобайтовых элементов.
...
Рейтинг: 0 / 0
Lazarus
    #39877372
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

Да я в курсе что в дельфе UTF8String это вообще AnsiSting.

Только радоватся этому я смысла не вижу.
...
Рейтинг: 0 / 0
Lazarus
    #39877373
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatДа я в курсе что в дельфе UTF8String это вообще AnsiSting.
Оно и в FPC так.

rgreatТолько радоватся этому я смысла не вижу.
А я не вижу смысла сокрушаться по этому поводу. Могу повторить ещё раз - UTF-8 не для манипуляций со строками, это компактная кодировка для хранения и передачи юникода.
...
Рейтинг: 0 / 0
Lazarus
    #39877375
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

Так-то оно так, но чем тогда UTF8String лучше обычного TBytes?
Нафига он такой ущербный нужен?
...
Рейтинг: 0 / 0
Lazarus
    #39877427
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatKazantsev Alexey,

Так-то оно так, но чем тогда UTF8String лучше обычного TBytes?
Нафига он такой ущербный нужен?лишние сущности это плохо, а невыделенная сущность это ещё хуже
...
Рейтинг: 0 / 0
25 сообщений из 314, страница 4 из 13
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Lazarus
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]