FPC-Version 3.1.1
ich trau mich ja schon gar nicht mehr posten, zum Thema UTF-8
Folgendes Problem beschäftigt mich gerade:
Zwei UTF-8-Strings, der eine heißt s1 der andere s2. Beide haben den Inhalt "wärme" (kleingeschrieben).
Code: Alles auswählen
Überwachte Ausdrücke (string bzw. "Speicherauszug"):
s1 wärme
s1 77 c3 a4 72 6d 65 00 85 00 00 65 00 20 00 2e 00 2e 00 2e 00 00 00 00 74 65 72...
s2 'wärme'
s2 77 c3 a4 72 6d 65 00 00 00 00 00 00 00 00 00 20 85 00 65 00 75 00 67 00 75 00...
Ein Vergleich mit dem <>-Operator liefert allerdings true. =-Operatur liefert false. Hmm.
Hab's nun zeichenweise probiert, und es zeigt sich, dass fer Vergleich beim "ä" fehlschlägt.
Code: Alles auswählen
var
j:integer;
s1,s2:string;
gleich:boolean;
a,b:string;
.....
for j:=1 to UTF8Length(s1) do
begin
a:=UTF8Copy(s1,j,1);
b:=UTF8Copy(s2,j,1);
if a<>b then
gleich:=false;
end;
if gleich=false then
ShowMessage('gleich=false');
if s1=s2 then
ShowMessage('= funktioniert');
Am Breakpoint gleich:=false, beim zweiten Mal, wenn a='ä' und b='ä' sind, zeigt sich folgender Speicherauszug:
Code: Alles auswählen
Überwachte Ausdrücke (string bzw. "Speicherauszug"):
a ä
a c3 a4 00 ba 0d f0 ad ba 0d f0 ad ba 0d f0 ad ba 0d f0 ad ba 0d f0 ad ba 0d f0...
b ä
b c3 a4 00 c2 a4 72 6d 65 00 00 65 00 20 00 26 20 00 00 2e 00 00 00 00 74 65 72...
Kann es vielleicht sein, dass der =/<>-Operatur unabsichtlich z.B. ein Byte mehr hinter dem String mitvergleicht, welches normalerweise zufällig 0 ist, oder so?!
Hat jemand eine Idee?
LG, Helmut