|
|
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
rgreatТрешак. Дока. Но если угодно, можно сказать что юникодовые состоят из двухбайтовых элементов, которые можно считать символами UCS-2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2019, 20:36 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
Вот, кстати, ссылочка, где прямо говорится об элементах строк: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2019, 20:46 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyНо если угодно, можно сказать что юникодовые состоят из двухбайтовых элементов, которые можно считать символами UCS-2.Меня печалит то что работа функции Length не постоянна. Ладно бы она всегда выдавала кол-во символов, или всегда количество байт. Можно было бы писать нормальный код. Но в текущей реализации это "скажи привет" условной компиляции и миллиону ifdef. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2019, 21:02 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
rgreat> Но в текущей реализации это "скажи привет" условной компиляции и миллиону ifdef. Можно же свою написать, зачем директивы втыкать. P.S. Не знал, что кто-то использует UCS. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2019, 21:17 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
rgreat, rgreatЛадно бы она всегда выдавала кол-во символов Каких символов? Нормализованных? В какой форме нормализации? rgreatили всегда количество байт Размер в байтах без ифдефов и условной компиляции: Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2019, 21:25 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
rgreatKazantsev Alexey, Что такое "элемент" строки в этом контексте? Kazantsev Alexey, Ну то есть сферическими конями в вакууме. Если для UTF-8 она возвращает хотя бы длину строки в байтах, то для UnicodeString она вообще бесполезна получается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2019, 22:04 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
alekcvpНу то есть сферическими конями в вакууме. Нет. alekcvpто для UnicodeString она вообще бесполезна получается Почему бесполезна и чем лучше размер в байтах? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2019, 22:13 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyПочему бесполезна и чем лучше размер в байтах? А какой толк от функции, которая возвращает длину строки не в байтах и не в символах?.. Это как возвращать размер прямоугольника на экране не в пикселах и не в сантиметрах, а в енотах. Причём каждый енот разной длины (суррогатные пары), если тебе нужен точный размер (кол-во символов) - всё равно придётся заново линейкой померять (распарсить). А если в байтах - то зачем было на 2 умножать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2019, 22:52 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
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. Она суррогатные пары учитывает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2019, 22:54 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
alekcvpА какой толк от функции, которая возвращает длину строки не в байтах и не в символах?.. Это как возвращать размер прямоугольника на экране не в пикселах и не в сантиметрах, а в енотах. Причём каждый енот разной длины (суррогатные пары), если тебе нужен точный размер (кол-во символов) - всё равно придётся заново линейкой померять (распарсить). Я и тебя спрошу о символах. Каких символов? Нормализованных? В какой форме нормализации? Без ответа на этот вопрос тебе даже UTF-32 не поможет. alekcvpОна суррогатные пары учитывает? Для подобной функции это не проблема, они будут учитываться без прилагания каких либо усилий. И как я уже говорил, можно считать, что: юникодовые состоят из двухбайтовых элементов, которые можно считать символами UCS-2 Если быть ещё более точным, то это кодпоинты BMP. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2019, 23:35 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexeyrgreat, Каких символов? Нормализованных? В какой форме нормализации? Char, SizeOf(Char) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2019, 23:44 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
rgreatChar, SizeOf(Char) А сейчас не количество чаров возвращается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2019, 23:50 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Я-то откуда знаю. Я неделю на лазаре пишу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 00:13 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
Но судя по твоему "Writeln(Length(Utf8String('1¢'))); // displays 3" - нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 00:14 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
rgreatНо судя по твоему "Writeln(Length(Utf8String('1¢'))); // displays 3" - нет. Так Utf8String - это байтовая строка. С чего бы Length должна возвращать количество Char для байтовой строки??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 00:22 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Потому что UTF8 не байтовая строка. Это строка с вариативным размером char. По законам здравого смысла Length строки должен выдавать количество символов в ней. А s[n] возвращать символ под номером n. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 01:08 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
Для выявления же размера в байтах по хорошему надо использовать нечто вроде System.SysUtils.ByteLength(s). Особенно в случае UFT8 и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 01:11 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
rgreatПотому что UTF8 не байтовая строка. Это строка с вариативным размером char. Ты не фантазируй, а на декларацию типа смотри. Она байтовая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 01:22 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Они все в памяти "байтовые". Только суть от этого не меняется. Раз уж строка состоит из разных видов char то по этим char к ней и надо по логике вещей доступ делать. Это будет универсально а не как нынче с зоопарком подходов. А с байтами надо бы работать через байты а не через индекс символа в строек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 01:27 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
rgreatОни все в памяти "байтовые" Вопрос можно было бы ставить таким образом, если бы эта адресуемость не была публичным интерфейсом. Но она такая, какая есть. Вот юникодовые строки они не байтовые, хотя "в памяти...". rgreatРаз уж строка состоит из разных видов char В том то и дело, что состоит она из однобайтовых элементов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 01:36 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Да я в курсе что в дельфе UTF8String это вообще AnsiSting. Только радоватся этому я смысла не вижу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 01:54 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
rgreatДа я в курсе что в дельфе UTF8String это вообще AnsiSting. Оно и в FPC так. rgreatТолько радоватся этому я смысла не вижу. А я не вижу смысла сокрушаться по этому поводу. Могу повторить ещё раз - UTF-8 не для манипуляций со строками, это компактная кодировка для хранения и передачи юникода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 02:03 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Так-то оно так, но чем тогда UTF8String лучше обычного TBytes? Нафига он такой ущербный нужен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 03:20 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39877370&tid=2037658]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
| others: | 220ms |
| total: | 362ms |

| 0 / 0 |
