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

alekcvpЧто не так? Вот есть у тебя дельфийская строка - у неё длина в символах равна длине в байтах/размер символа
Вот это и не так. Суррогатная пара требует два кодпоинта, и преобразована она будет в один. Все кодпоинты за пределами BMP будут кодироваться суррогатными парами.

Но это всё равно проще, чем чекать все последовательности UTF-8. UTF-8 не для обработки строк - строго для хранения и передачи.
...
Рейтинг: 0 / 0
Lazarus
    #39876571
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да уж работать с utf8 это почти также геморно как работать с base64.
...
Рейтинг: 0 / 0
Lazarus
    #39876595
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот сколько кодю, ни разу не понадобилось узнавать, что же за символ по конкретному индексу в строке...
...
Рейтинг: 0 / 0
Lazarus
    #39876608
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Вот сколько кодю, ни разу не понадобилось узнавать, что же за символ по конкретному индексу в строке...
Что, ни разу не использовали конструкцию s[x] := ... ?
...
Рейтинг: 0 / 0
Lazarus
    #39876612
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpА как определить длину строки UTF8 с латиницей и кириллицей вперемешку?
я не совсем тебя понял, тебе что надо-то в конце концов? Длину "дельфийской" строки в Лазаре? Юзай UTF8Length из LazUTF8.

Если тебе надо посимвольно, то ищешь посредством UTF8Pos(первый аргумент может быть и строкой, и Char'ом). Если побайтно, то загоняй свою строку в RawByteString и ползай по ней, куда угодно. Там все аналогично дельфям :)
...
Рейтинг: 0 / 0
Lazarus
    #39876613
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Вот сколько кодю, ни разу не понадобилось узнавать, что же за символ по конкретному индексу в строке...
ну, не скажи. Неужели ни разу строку не парсил? :)
...
Рейтинг: 0 / 0
Lazarus
    #39876623
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокДлину "дельфийской" строки в Лазаре? Юзай UTF8Length из LazUTF8.
Ну вот и сравни скорость этой функции с дельфийской Length().
...
Рейтинг: 0 / 0
Lazarus
    #39876633
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
15.10.2019 15:22, alekcvp пишет:
> Ну вот и сравни скорость этой функции с дельфийской Length().

ога.
а тёплое сравни с мягким.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Lazarus
    #39876676
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpНу вот и сравни скорость этой функции с дельфийской Length().
так тебе шашечки или ехать? ©

Для нафига тебе посимвольный доступ? Хочешь быстро, заполняй строкой массив байт и вперде. Будет работать гарантированно на любой кодовой странице. Правда, возни больше :)
...
Рейтинг: 0 / 0
Lazarus
    #39876688
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2,

повезло. у нас - то сплошь и рядом. utf8 в лазаре знатно добавил работы
...
Рейтинг: 0 / 0
Lazarus
    #39876695
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доктак тебе шашечки или ехать? © Если продолжить аналогии то Utf18 - такси с шашечками, а Utf8 - велосипед "чтобы ехать".

У лучше на такси. ;)
...
Рейтинг: 0 / 0
Lazarus
    #39876704
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonutf8 в лазаре знатно добавил работы
Что вам мешает использовать UnicodeString?
...
Рейтинг: 0 / 0
Lazarus
    #39876713
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpЧто, ни разу не использовали конструкцию s[x] := ... ?
Обычно этот х не берется с потолка, а как-то вычисляется. соответственно без разницы, какой будет этот х, и какой вообще формат строк - utf8, ansi или utf16 - итоговый код одинаков для всего.
Докну, не скажи. Неужели ни разу строку не парсил? :)
Парсил конечно, но как-то так получалось, что все служебные символы были ANSI и проверялись в цикле, а все остальные заглатывались скопом.
Типа такого (полу-псевдокод)
Код: pascal
1.
2.
3.
4.
5.
6.
7.
for i := 1 to Length(s) do
  if s[i] = '{' then
  begin
    endpos := PosEx(s, '}', i);
    contents := Copy(s, i, endpos - i);
    i := endpos;
  end;
...
Рейтинг: 0 / 0
Lazarus
    #39876714
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexeymakhaonutf8 в лазаре знатно добавил работы
Что вам мешает использовать UnicodeString?
По-хорошему, тогда уж UCS4String. Иначе один фиг суррогатные пары могут добавить веселья
...
Рейтинг: 0 / 0
Lazarus
    #39876718
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonutf8 в лазаре знатно добавил работы
Дим, если не секрет, где конкретно и на какой платформе?
...
Рейтинг: 0 / 0
Lazarus
    #39876720
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2По-хорошему, тогда уж UCS4String. Иначе один фиг суррогатные пары могут добавить веселья
UCS4 для всего это слишком жирно, но в определённых сценариях вполне себе вариант. А с суррогатами в UTF-16 всё довольно просто, буквально пара условий.
...
Рейтинг: 0 / 0
Lazarus
    #39876721
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Типа такого (полу-псевдокод)
Без UTF8...-аналогов сомневаюсь. На никсах прокатит, а на винде - фиг, если только строка не явно 1-байтовая. Попробуй сам, "погуляй" отладчиком в виндовом Лазаре по String'у - он будет 2х-байтовым :)
...
Рейтинг: 0 / 0
Lazarus
    #39876722
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле, по-хорошему, для переносимого кода работа с char должна быть строго ограничена ansi диапазоном. Все остальные случаи должны использовать функции типа GetCharAt или GetNextChar, возвращающие UCS4, либо строки.
Например - делаем мы функцию Split с разделителем-символом на Delphi со строками в utf16. Всё было хорошо, пока кто-то не захотел расщепить строку по символу 1F708 ALCHEMICAL SYMBOL FOR AQUA VITAE. И всё, облом.
...
Рейтинг: 0 / 0
Lazarus
    #39876723
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокВасилий 2Типа такого (полу-псевдокод)
Без UTF8...-аналогов сомневаюсь. На никсах прокатит, а на винде - фиг, если только строка не явно 1-байтовая. Попробуй сам, "погуляй" отладчиком в виндовом Лазаре по String'у - он будет 2х-байтовым :)
В смысле, в чем сомневаешься? Код универсальный под любую кодировку строк.
Про отладчик в Лазаре не напоминай... это боль и страдания
...
Рейтинг: 0 / 0
Lazarus
    #39876731
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Код универсальный под любую кодировку строк.
в этом. Попробуй сделать под виндой
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
var
  TmpStr: String = 'ЖЗИфыв';
begin
  if pos('ф', TmpStr) = 4
    then
      Self.Caption:= 'ага'
    else
      Self.Caption:= 'ой';
end;


Потом поделишься впечатлениями :)
...
Рейтинг: 0 / 0
Lazarus
    #39876756
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Например - делаем мы функцию Split с разделителем-символом на Delphi со строками в utf16. Всё было хорошо, пока кто-то не захотел расщепить строку по символу 1F708 ALCHEMICAL SYMBOL FOR AQUA VITAE. И всё, облом.
Это вопрос элементарного дизайна:
Код: pascal
1.
2.
3.
...
      Function Split(Const ASeparator : Common.Types.UnicodeString) : TSubStrings; Overload;
      Function Split(Const ASeparator : WideChar) : TSubStrings; Overload;
...
Рейтинг: 0 / 0
Lazarus
    #39876776
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док,

на линукске. у нас довольно много обработки строк посимвольно. кровушки попило, но уже вылизали.
...
Рейтинг: 0 / 0
Lazarus
    #39876783
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Обычно этот х не берется с потолка, а как-то вычисляется. соответственно без разницы, какой будет этот х, и какой вообще формат строк - utf8, ansi или utf16 - итоговый код одинаков для всего.
Код в программе - да, а вот под капотом: UTF16 - пишем новый символ на место старого, UTF8 - при замене латинского символа на кириллицу, например, там будет куча операций, потому что под кириллицу надо больше места, чем под латиницу.
...
Рейтинг: 0 / 0
Lazarus
    #39876788
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
program Test1;

{$mode delphiunicode}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  Classes,
  SysUtils,
  graphtype,
  intfgraphics,
  lazcanvas,
  fpimage,
  fpcanvas,
  types
  { you can add units after this };

var
  i        : integer;
  RawImage : TRawImage;
  Img      : TLazIntfImage;
  CV       : TLazCanvas;
  Col      : TFPColor;
begin
  try
    WriteLn('Start');
    RawImage.Init;
    RawImage.Description.Init_BPP32_A8R8G8B8_BIO_TTB(1280, 1024);
    RawImage.CreateData(True);

    Img:=TLazIntfImage.Create(0,0);
    try
      Img.SetRawImage(RawImage);
      CV:=TLazCanvas.Create(img);
      try
        CV.Brush.FPColor:=colWhite;
        CV.FillColor(colTransparent);
        Col.Red:=65535;
        Col.Green:=0;
        Col.Blue:=0;
        for i:=50 to 200 do begin
          Col.Alpha:=(i+50)*255;
          CV.Pen.FPColor:=Col;
          CV.Line(i*2,50,i*2,450);
        end;
        Img.SaveToFile('1.bmp',TLazWriterBMP.Create);
        WriteLn('1.bmp written');
        Img.SaveToFile('1.png',TLazWriterPNG.Create);
        WriteLn('1.png written');
      finally
        CV.Free;
      end;
    finally
      Img.Free;
    end;
  except
    on E: Exception do begin
      WriteLn('Error: '+E.Message);
    end;
  end;
  ReadLn;
end.


Изображения на диске не прозрачные а черные. Что я делаю не так?
...
Рейтинг: 0 / 0
Lazarus
    #39876789
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще вопрос.

Можно ли как нибудь настроить удаленную отладку на headless линуксе из винды?

Желательно без ручного запихивания каждый раз запускаемого файла и кучи телодвижений.
Хотелось бы как в дельфях с PAServer-ом.

Ну или "хотя бы как".

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


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