Ékezetes karakterláncok hossza.
- stickel
-
- Új fórumozó
-
- Hozzászólások: 11
- Köszönetek: 0
stickel válaszolt a témára: Ékezetes karakterláncok hossza.
Nagyon köszönöm! 
Gábor

Gábor
- Gábor
-
- Adminisztrátor
-
- Hozzászólások: 436
- Karma: 8
- Köszönetek: 70
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.
Eredmény:
Látható, hogy az UTF8Length mindkét esetben helyesen adta vissza a megjelenítendő karakterek számát.
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.
Megköszönték: stickel
- stickel
-
- Új fórumozó
-
- Hozzászólások: 11
- 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
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