angeregt von Jorg3000 Thread viewtopic.php?f=29&t=15258 möchte ich euch meine UTF8 Klasse vorstellen.
Ich hatte die Aufgabe nach solchen Chars 'üäößẶặǺǻǼǽǞǟǍǎḂḃÞþÇçĆćĊċ...' und Combining Chars zu parsen. Also Zeichen, die sich aus zwei Zeichen zusammensetzen. Siehe https://en.wikipedia.org/wiki/Combining_character
Mit der LazUTF8 unit geht das, sieht aber sehr kryptisch aus. Wenn man nach 3 Wochen seinen Code wieder anschaut, versteht man nur sehr schwer, was man da gemacht hat. Aus diesem Grunde habe ich mir eine Klasse geschrieben, die den Code besser verständlich macht.
Hier ein Beispiel:
Code: Alles auswählen
proceudre Demo01: Boolean;
var
u: IbUtf8;
i: Integer;
begin
u:= TIbUtf8.Create('Thömäß');
for i:= 1 to u.NumberOfChars do begin
case u.Chars[i] of
'ö': u.Chars[i]:= 'o';
'ä': u.Chars[i]:= 'a';
'ß': u.Chars[i]:= 's';
end;
end;
if u.Text = 'Thomas' then begin
WriteLn('That''s right!');
end;
end;
Klar sollte sein, dass Komfort seinen Preis hat, ich will damit sagen, dass es deutlich langsamer ist, als über ein Array zu iterieren. Aber das gleiche Problem hat die "LazUTF8" auch. Das ist eben der Preis von UTF8.
Die Klasse und Doku findet ihr hier:https://gitlab.com/FpTuxe/tbutf8
Viele Grüße vom AltenPascaler