Lazarus 2.2.0 RC1 (2021.02.21.)
Letöltés

  • Oldal:
  • 1

TÉMA:

Ékezetes karakterláncok hossza. 2020 márc. 16 13:03 #2344

  • stickel
  • stickel profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 11
  • Köszönetek: 0
Nagyon köszönöm! :)

Gábor

Ékezetes karakterláncok hossza. 2020 márc. 03 14:28 #2343

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 472
  • Köszönetek: 80
A megoldás a LazUTF8 unit UTF8Length függvénye.

Teszteléshez add a uses listához a LazUtf8 unit-ot.
Helyezz el az ablakban egy TMemo-t.
A TForm1.FormCreate eseméynkezelőt az alábbiak szerint írd meg.
procedure TForm1.FormCreate(Sender: TObject);
var
  s1,s2: string;
begin
  s1 := '123';
  s2 := 'aáb';
  Memo1.Append('s1 - Length(s1): '+IntToStr(Length(s1))+', UTF8Length(s1): '+IntToStr(UTF8Length(s1)));
  Memo1.Append('s2 - Length(s2): '+IntToStr(Length(s2))+', UTF8Length(s2): '+IntToStr(UTF8Length(s2)));
end;

Eredmény:
Memo1
s1 - Length(s1): 3, UTF8Length(s1): 3
s2 - Length(s2): 4, UTF8Length(s2): 3

Látható, hogy az UTF8Length mindkét esetben helyesen adta vissza a megjelenítendő karakterek számát.
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 2.3.0 -- FPC 3.3.1-- GNU/Linux 5.4.0 x86_64
Megköszönték: stickel

Ékezetes karakterláncok hossza. 2020 márc. 02 20:58 #2342

  • stickel
  • stickel profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 11
  • Köszönetek: 0
Sziasztok,

mióta fixre beépítették az UTF8 kódolást, gondban vagyok a karakterláncok (stringek) hosszával. Az ékezetes betűket mindig 2 karakternek érzékeli (ami igaz is), de a többit mindig 1 karakternek. Ez azért probléma, mert ha szükségem van egy string hosszára, akkor az ékezetes karakterek megnövelik a hosszt, holott vizuálisan mindegyik csak 1 karakter és nekem erre lenne szükségem pozícióhelyes nyomtatás miatt.

példa: a "dátum" szó 5 karakter, de a length föggvény 6-nak adja vissza és az nekem nem jó. A régebbi fordítók (1.6-ig) jól kezelték, a gond a magasabb verziókkal van. Próbáltam már mindenféle konverziót, de egyik sem oldja meg. A szavak fixen be vannak írva a forráskódba.

Valami ötlet? Hagy tanuljak :)

Gábor

  • Oldal:
  • 1