Autor Téma: UFT8Decode Tmemobuf  (Přečteno 130 krát)

Offline szs

  • Nováček
  • *
  • Příspěvků: 6
  • Karma: 0
    • Verze Delphi: XE2
UFT8Decode Tmemobuf
« kdy: 30-05-2019, 11:11:33 »
Dobrý den,

 moc prosím o pomoc.
 v Delphi 7.0 dekóduju obsah Tmomebuf pomoci

memobuf.text:= uft8decode(memobuf.text);

Jenže to funguje jen do 64 kB. Pokud bych chtěl použít utf8decode na celý obsah memobuf, existuje nějaký způsob? Např. dekódovat stream? Asi by šlo uft8decode(memobuf.buffer^), ale nevím, jak to nacpat zpět do memobuf.

Poradíte prosím?

Díky!

szs


Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2329
  • Karma: 102
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:UFT8Decode Tmemobuf
« Odpověď #1 kdy: 30-05-2019, 11:29:36 »
Delphi 7 nemám, ale dříve existoval limit Memo na 64k, ale myslel jsem že se to týkalo jen Win9x.

Když dáš
Kód: Delphi [Vybrat]
  1. var
  2.   s, s2: string;
  3. begin
  4.   s := memobuf.text;
  5.   ShowMessage(Lenght(s));
  6.   s2 := uft8decode(s);
  7.   ShowMessage(Lenght(s2));
  8. end;
  9.  

tak ti to vrátí delku vetsi nez 64K?
Embarcadero MVP - Czech republic

Offline szs

  • Nováček
  • *
  • Příspěvků: 6
  • Karma: 0
    • Verze Delphi: XE2
Re:UFT8Decode Tmemobuf
« Odpověď #2 kdy: 30-05-2019, 12:05:34 »
Aha, tak už dobrý.

Zmátlo mě, že Length(memobuf.text) je jen 64 kB, ale kupodivu lze pomocí memobuf.text:=... zadat delší obsah.

Musí to být skutečně

memobuf.text:=utf8decode(memobuf.buffer^);
...

To jsem zkoušel, ale zapomněl jsem, že na konci mi zůstalo

...
memobuf.text:=utf8encode(memobuf.text);

místo

...
memobuf.text:=utf8encode(memobuf.buffer^);


Každopádně díky moc za rychlou radu, trápi jsem se s tím, vůl, 2 dny :)