|
|
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
rgreatТак-то оно так, но чем тогда UTF8String лучше обычного TBytes? Нафига он такой ущербный нужен? Используй UTF8Lenght() vs Lenght(), UTF8Pos() vs Pos()... Что-то мешает этому? Они корректно работают что с UTF8String(AnsiString(CP_UTF8)/RawByteString(AnsiString(CP_NONE)), что co String (которая в винде ведет себя, как 2-байтовая AnsiString, а в линуксе [ если я правильно помню ] - как 1-байтовая). Еще бы я посоветовал глянуть сюда и сюда . Возможно, это внесет какую-то ясность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 09:34 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
было (Delphi), стало (FPC) Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Приходится два кода держать, да и вообще неуднобно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 10:54 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
Length возвращает количество элементов , что соответствует поведению массивов, хоть со стороны на первый взгляд и может показаться непривычным. К тому же, повторюсь, есть очень мало случаев, когда требуется получать именно конкретный кодпоинт. В подавляющем большинстве применений if s[i]='Ы' then ... или if Pos('Гы', s) <> 0 then... или что-то вроде - всё это будет прекрасно работать и без заморочек с плавающими длинами кодпоинтов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 10:57 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
makhaonбыло (Delphi), стало (FPC) Потому что пора бы оторваться от алгоритмов детского сада и копировать кусками ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 10:59 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
makhaonбыло (Delphi), стало (FPC) Кстати, а в чем вообще проблема? Символы из набора ", #0..#9, #11, #12, #14..#20 заменяются на пробелы, так? Но ведь и составляющие суррогатной пары, и первый байт любого кодпоинта utf8 имеют особые значения, которые не перепутаешь с символами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 11:04 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
Василий 2makhaonбыло (Delphi), стало (FPC) Потому что пора бы оторваться от алгоритмов детского сада и копировать кусками То есть еще существенно усложнить обработку в обоих случаях? Можно. Но результат станет еще хуже. Хоть и работать будет лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 11:19 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
rgreatТак-то оно так, но чем тогда UTF8String лучше обычного TBytes? Нафига он такой ущербный нужен? Ну, например, у codepage aware строк есть COW и поддержка элементарных строковых функций, что может быть полезно при разработке, например, http сервера или клиента (для обработки заголовков не требуется переводить их в юникод-строку только для того чтобы выполнить некоторые проверки). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 12:33 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
makhaonПриходится два кода держать, да и вообще неуднобно Что вам мешает использовать UnicodeString в FPC? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 12:35 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
makhaonПриходится два кода держать, да и вообще неуднобно. И насколько я понимаю, этот дельфийский код работал бы без переделок даже для Utf8String. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 12:48 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
makhaonТо есть еще существенно усложнить обработку в обоих случаях? Можно. Но результат станет еще хуже. Хоть и работать будет лучше. Нет, при использовании фрагментов строк вместо символов код будет один. Хотя и этот нормально работает на любых строках ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 14:33 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, авторЧто вам мешает использовать UnicodeString в FPC? Так еще больше править - код один и пришлось бы все string'и менять на какие-то свои с дефайнами. авторНет, при использовании фрагментов строк вместо символов код будет один. Хотя и этот нормально работает на любых строках Лучше с кодом. Что-то не могу представить как можно сделать один код и для дефолтных string'ов delphi и fpc без дефайнов или как у меня - просто двух кусков кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 15:54 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
makhaonТак еще больше править - код один и пришлось бы все string'и менять на какие-то свои с дефайнами. Пишешь {$mode delphiunicode} или {$modeswitch unicodestrings}, если нужен диалект fpc, и ничего править не нужно - дефолтные строки становятся юникодовыми. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 16:11 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
makhaonЧто-то не могу представить как можно сделать один код и для дефолтных string'ов delphi и fpc без дефайнов или как у меня - просто двух кусков кода. Приведённый тобою дельфийский код одинако работоспособен с любыми типами дефолтных строк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 16:15 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, это да. однако все api в линухе как было utf8 строки, так и останется. ну и придется лепить прокладки. так как я сейчас сделал - получились минимальные правки. когда строки в лазаре станут по дефолту как в делфи, то получится вообще один код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 16:18 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, авторПриведённый тобою дельфийский код одинако работоспособен с любыми типами дефолтных строк. Увы, не работало. пришлось переписывать. Ну не от хорошей жизни же правил :) Работало бы - нафиг я бы это все трогал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 16:19 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
makhaonоднако все api в линухе как было utf8 строки, так и останется. ну и придется лепить прокладки У тебя там много работы непосредственно с API? Да и какие прокладки, конвертирование строк делается простым приведением типа. К слову, у FPC в RTL многие функции (не все) имеют перегруженные варианты для трёх типов строк: unicode, utf8 и rawbytestring. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 16:21 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
makhaonУвы, не работало. пришлось переписывать. Я конечно не проверял, но у тебя там заменяемые символы не выходят из диапазона ASCII. Ни один спец символ используемый для кодирования последовательностей utf8 не будет заменён (т.к. все они имеют старший бит установленный в единицу), следовательно последовательности нарушены не будут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 16:26 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, авторУ тебя там много работы непосредственно с API? Да и какие прокладки, конвертирование строк делается простым приведением типа. К слову, у FPC в RTL многие функции (не все) имеют перегруженные варианты для трёх типов строк: unicode, utf8 и rawbytestring. Хватает всякого, кода полмиллиона строк. авторЯ конечно не проверял, но у тебя там заменяемые символы не выходят из диапазона ASCII. Точно не работало. Впрочем можно попробовать перепроверить. Ну и это не единственное место. Просто относительно простое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 16:31 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
Кусочки веселушки равномерно рзамазаны по коду: Код: pascal 1. 2. Везде по чуть-чуть. Общая картина далека от радостной. Но работает :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 17:06 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
makhaonКусочки веселушки равномерно рзамазаны по коду: Код: pascal 1. 2. Везде по чуть-чуть. Общая картина далека от радостной. Но работает :) Ох ё... мало того что бессмысленно это, ибо и так работает, так еще и сделано максимально коряво. Вместо того, чтобы плодить дефайны, сделали бы NativeStrPos, которая бы мапилась на соответствующую функцию из RTL и всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 17:12 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
Василий 2так еще и сделано максимально коряво. зато, как красиво! В одну строку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 17:16 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
Василий 2Ох ё... Эт точно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 17:21 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
Согласен. Нормальные строки решат весь ох е... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 18:26 |
|
||
|
Lazarus
|
|||
|---|---|---|---|
|
#18+
Что ж, если человек желает продолжать плодить говнокод, то медицина тут бессильна ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 19:43 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39877624&tid=2037658]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
165ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 219ms |
| total: | 496ms |

| 0 / 0 |
