Recent

Author Topic: WideUppercase etc  (Read 4943 times)

mschnell

  • Full Member
  • ***
  • Posts: 131
    • http://www.lumino.de
WideUppercase etc
« on: October 17, 2008, 03:28:20 pm »
WideUppercase() and AnsiUppercase() do not seem to work for German Umlauts. The same code does work in TurboDelphi.

Is this a (known) bug, a Feature or do I do something wrong ?

-Michael

theo

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 1927
RE: WideUppercase etc
« Reply #1 on: October 17, 2008, 11:50:23 pm »

mschnell

  • Full Member
  • ***
  • Posts: 131
    • http://www.lumino.de
RE: WideUppercase etc
« Reply #2 on: October 18, 2008, 09:44:53 pm »
IMHO that is not obvious.
See the follow-up discussion.

On Monday I'll post the code here, as well,  so that whoever likes can test it.

-Michael

mschnell

  • Full Member
  • ***
  • Posts: 131
    • http://www.lumino.de
RE: WideUppercase etc
« Reply #3 on: October 21, 2008, 02:16:30 pm »
Please test this code:

Code: [Select]

 
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;
 
 
Result of the  des Lazarus Programm:
 
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
 
 
Result of the Turbo-Delphi-Programm:
 
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

 

TinyPortal © 2005-2018