Lazarus 2.0.8 (2020.04.16.)
Letöltés

file Ékezetes karakterláncok hossza.

  • stickel
  • stickel profilkép
  • Új fórumozó
  • Új fórumozó
  • Hozzászólások: 9
  • Köszönetek: 0

stickel válaszolt a témára: Ékezetes karakterláncok hossza.

Nagyon köszönöm! :)

Gábor
#2344

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 426
  • Karma: 8
  • Köszönetek: 68

Gábor válaszolt a témára: Ékezetes karakterláncok hossza.

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.
#2343
Megköszönték: stickel

  • stickel
  • stickel profilkép
  • Új fórumozó
  • Új fórumozó
  • Hozzászólások: 9
  • Köszönetek: 0

stickel létrehozta a témát: Ékezetes karakterláncok hossza.

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
#2342