- utf8uppercase geht auch nicht

(In Turbo-Delphi funktioniert's)
- der Typ String ist offensichtlich doch nicht = Widestring.
- das einzige, was In Turbo Delphi nicht funktioniert ist uppercase mit nicht weiter spezifiziertem type "String". Das könnte sogar Absicht sein ....
Neue Version mit stark erweiterten Ausgaben:
Code: Alles auswählen
implementation
uses
lclproc;
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var
s1, s2, s3: string;
c1: char;
i1: Integer;
su1, su2: UTF8String;
sw1, sw2: Widestring;
ss1, ss2: ShortString;
sa1, sa2: AnsiString;
begin
s1 := 'abcdefhäöü<';
sa1 := 'abcdefhäöü<';
sw1 := s1;
ss1 := s1;
su1 := AnsiToUtf8(sa1);
s2 := UpperCase(s1);
sa2 := AnsiUpperCase(sa1);
su2 := UTF8UpperCase(su1);
sw2 := WideUpperCase(sw1);
s3 := sw2;
ss2 := Uppercase(ss1);
Memo1.Lines.Add('s1 (' + inttostr(length(s1)) + '):');
Memo1.Lines.Add(s1);
dump(@s1[1], length(s1));
Memo1.Lines.Add('s2 (' + inttostr(length(s2)) + '):');
Memo1.Lines.Add(s2);
dump(@s2[1], length(s2));
Memo1.Lines.Add('s3 (' + inttostr(length(s3)) + '):');
Memo1.Lines.Add(s3);
dump(@s3[1], length(s3));
Memo1.Lines.Add('su1 (' + inttostr(length(su1)) + '):');
Memo1.Lines.Add(su1);
dump(@su1[1], length(su1));
Memo1.Lines.Add('su2 (' + inttostr(length(su2)) + '):');
Memo1.Lines.Add(su2);
dump(@su2[1], length(su2));
Memo1.Lines.Add('sw1 (' + inttostr(length(sw1)) + '):');
Memo1.Lines.Add(sw1);
dump(@sw1[1], 2*length(sw1));
Memo1.Lines.Add('sw2 (' + inttostr(length(sw2)) + '):');
Memo1.Lines.Add(sw2);
dump(@sw2[1], 2*length(sw2));
Memo1.Lines.Add('ss1 (' + inttostr(length(ss1)) + '):');
Memo1.Lines.Add(ss1);
dump(@ss1[1], length(ss1));
Memo1.Lines.Add('ss2 (' + inttostr(length(ss2)) + '):');
Memo1.Lines.Add(ss2);
dump(@ss2[1], length(ss2));
Memo1.Lines.Add('sa1 (' + inttostr(length(sa1)) + '):');
Memo1.Lines.Add(sa1);
dump(@sa1[1], length(sa1));
Memo1.Lines.Add('sa2 (' + inttostr(length(sa2)) + '):');
Memo1.Lines.Add(sa2);
dump(@sa2[1], length(sa2));
c1 := s1[1];
i1 := sizeof(c1);
Memo1.Lines.Add('-' + ' ' + inttostr(i1));
end;
procedure TForm1.dump(p: pointer; l: integer);
var
pc: ^ANSIchar;
i: Integer;
c: ANSIchar;
s1, s2: String;
begin
pc := p;
s1:= '= ';
s2:= '= ';
for i := 0 to l-1 do begin
c := pc^;
inc(pc);
if (c > ' ') and (c < AnsiChar($7F)) then begin
s1 := s1 + c + ' ';
end else begin
s1 := s1 + '#' + IntToStr(ord(c)) + ' ';
end;
s2 := s2 + inttohex(ord(c), 2) + ' ';
end;
Memo1.Lines.Add(s1);
Memo1.Lines.Add(s2);
Memo1.Lines.Add('');
end;
Und die Ausgabe des Lazarus Programme:
s1 (14):
abcdefhäöü<
= a b c d e f h #195 #164 #195 #182 #195 #188 <
= 61 62 63 64 65 66 68 C3 A4 C3 B6 C3 BC 3C
s2 (14):
ABCDEFHäöü<
= A B C D E F H #195 #164 #195 #182 #195 #188 <
= 41 42 43 44 45 46 48 C3 A4 C3 B6 C3 BC 3C
s3 (14):
ABCDEFHäöü<
= A B C D E F H #195 #164 #195 #182 #195 #188 <
= 41 42 43 44 45 46 48 C3 A4 C3 B6 C3 BC 3C
su1 (20):
abcdefhäöü<
= a b c d e f h #195 #131 #194 #164 #195 #131 #194 #182 #195 #131 #194 #188 <
= 61 62 63 64 65 66 68 C3 83 C2 A4 C3 83 C2 B6 C3 83 C2 BC 3C
su2 (20):
ABCDEFHäöü<
= A B C D E F H #195 #131 #194 #164 #195 #131 #194 #182 #195 #131 #194 #188 <
= 41 42 43 44 45 46 48 C3 83 C2 A4 C3 83 C2 B6 C3 83 C2 BC 3C
sw1 (14):
abcdefhäöü<
= a #0 b #0 c #0 d #0 e #0 f #0 h #0 #195 #0 #164 #0 #195 #0 #182 #0 #195 #0 #188 #0 < #0
= 61 00 62 00 63 00 64 00 65 00 66 00 68 00 C3 00 A4 00 C3 00 B6 00 C3 00 BC 00 3C 00
sw2 (14):
ABCDEFHäöü<
= A #0 B #0 C #0 D #0 E #0 F #0 H #0 #195 #0 #164 #0 #195 #0 #182 #0 #195 #0 #188 #0 < #0
= 41 00 42 00 43 00 44 00 45 00 46 00 48 00 C3 00 A4 00 C3 00 B6 00 C3 00 BC 00 3C 00
ss1 (14):
abcdefhäöü<
= a b c d e f h #195 #164 #195 #182 #195 #188 <
= 61 62 63 64 65 66 68 C3 A4 C3 B6 C3 BC 3C
ss2 (14):
ABCDEFHäöü<
= A B C D E F H #195 #164 #195 #182 #195 #188 <
= 41 42 43 44 45 46 48 C3 A4 C3 B6 C3 BC 3C
sa1 (14):
abcdefhäöü<
= a b c d e f h #195 #164 #195 #182 #195 #188 <
= 61 62 63 64 65 66 68 C3 A4 C3 B6 C3 BC 3C
sa2 (14):
ABCDEFHäöü<
= A B C D E F H #195 #164 #195 #182 #195 #188 <
= 41 42 43 44 45 46 48 C3 A4 C3 B6 C3 BC 3C
- 1
Die Ausgabe des Turbo-Delphi-Programmes:
s1 (11):
abcdefhäöü<
= a b c d e f h #228 #246 #252 <
= 61 62 63 64 65 66 68 E4 F6 FC 3C
s2 (11):
ABCDEFHäöü<
= A B C D E F H #228 #246 #252 <
= 41 42 43 44 45 46 48 E4 F6 FC 3C
s3 (11):
ABCDEFHÄÖÜ<
= A B C D E F H #196 #214 #220 <
= 41 42 43 44 45 46 48 C4 D6 DC 3C
su1 (14):
abcdefhäöü<
= a b c d e f h #195 #164 #195 #182 #195 #188 <
= 61 62 63 64 65 66 68 C3 A4 C3 B6 C3 BC 3C
su2 (14):
ABCDEFHÄÖÜ<
= A B C D E F H #195 #132 #195 #150 #195 #156 <
= 41 42 43 44 45 46 48 C3 84 C3 96 C3 9C 3C
sw1 (11):
abcdefhäöü<
= a #0 b #0 c #0 d #0 e #0 f #0 h #0 #228 #0 #246 #0 #252 #0 < #0
= 61 00 62 00 63 00 64 00 65 00 66 00 68 00 E4 00 F6 00 FC 00 3C 00
sw2 (11):
ABCDEFHÄÖÜ<
= A #0 B #0 C #0 D #0 E #0 F #0 H #0 #196 #0 #214 #0 #220 #0 < #0
= 41 00 42 00 43 00 44 00 45 00 46 00 48 00 C4 00 D6 00 DC 00 3C 00
ss1 (11):
abcdefhäöü<
= a b c d e f h #228 #246 #252 <
= 61 62 63 64 65 66 68 E4 F6 FC 3C
ss2 (11):
ABCDEFHäöü<
= A B C D E F H #228 #246 #252 <
= 41 42 43 44 45 46 48 E4 F6 FC 3C
sa1 (11):
abcdefhäöü<
= a b c d e f h #228 #246 #252 <
= 61 62 63 64 65 66 68 E4 F6 FC 3C
sa2 (11):
ABCDEFHÄÖÜ<
= A B C D E F H #196 #214 #220 <
= 41 42 43 44 45 46 48 C4 D6 DC 3C
- 1
-Michael