[fpc-pascal] Weird string behavior

Petr Kohut mail at petr-kohut.cz
Sat Jul 23 13:31:12 CEST 2016


Hello,
here are results:

...
begin
   Writeln('--------------');
   Writeln;

   s1 := 'A';   // 1250
   s2 := 'Aä';  // 1250
   Writeln('s1 = "', s1, '" cp = ', StringCodePage(s1));
   Writeln('s2 = "', s2, '" cp = ', StringCodePage(s2));
   r1 := AnsiToUTF8(s1); // 65001
   r2 := AnsiToUTF8(s2); // 65001
   Writeln('r1 = "', r1, '" cp = ', StringCodePage(r1));
   Writeln('r2 = "', r2, '" cp = ', StringCodePage(r2));

   r3 := s1 + r2; // 1250
   Writeln('r3 = "', r3, '" cp = ', StringCodePage(r3));
   r3 := r1 + s2; // 65001
   Writeln('r3 = "', r3, '" cp = ', StringCodePage(r3));

   s3 := s1 + r2; // 1250
   Writeln('s3 = "', s3, '" cp = ', StringCodePage(s3));
   s3 := r1 + s2; // 65001
   Writeln('s3 = "', s3, '" cp = ', StringCodePage(s3));

   SetCodePage(RawByteString(s1), 65001, True);

   r3 := s1 + r2; // 65001
   Writeln('r3="', r3, '" cp=', StringCodePage(r3));
   r3 := r1 + s2; // 65001
   Writeln('r3="', r3, '" cp=', StringCodePage(r3));

   s3 := s1 + r2; // 65001
   Writeln('s3="', s3, '" cp=', StringCodePage(s3));
   s3 := r1 + s2; // 65001
   Writeln('s3="', s3, '" cp=', StringCodePage(s3));

   Readln;
end.

(*
--------------

s1 = "A" cp = 1250
s2 = "Aä" cp = 1250
r1 = "A" cp = 65001
r2 = "Aä" cp = 65001
r3 = "AAä" cp = 1250
r3 = "AA?" cp = 65001
s3 = "AAä" cp = 1250
s3 = "AA?" cp = 65001
r3="AAä" cp=65001
r3="AA?" cp=65001
s3="AAä" cp=65001
s3="AA?" cp=65001

*)



------ Původní zpráva ------
Od: "Jonas Maebe" <jonas.maebe at elis.ugent.be>
Komu: "FPC-Pascal users discussions" <fpc-pascal at lists.freepascal.org>
Odesláno: 23.07.2016 13:03:33
Předmět: Re: [fpc-pascal] Weird string behavior

>On 23/07/16 12:58, wkitty42 at windstream.net wrote:
>>  On 07/23/2016 06:13 AM, Jonas Maebe wrote:
>>  [...]
>>>  var
>>>    s1,s2,s3: AnsiString;
>>>    r1,r2,r3: RawByteString;
>>>  begin
>>>    s1:='A';   // 1252
>>>    s2:='Aä';  // 1252
>>>    writeln('s1="',s1,'" cp=',StringCodePage(s1));
>>>    writeln('s2="',s1,'" cp=',StringCodePage(s2));
>>
>>  writeln('s2="',s2,'" cp=',StringCodePage(s2));
>>
>>
>>  you're not the only one to have missed that...
>
>The only thing that matters for this test is the stringcodepage value,
>which is the correct one.
>
>
>Jonas
>_______________________________________________
>fpc-pascal maillist - fpc-pascal at lists.freepascal.org
>http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal





More information about the fpc-pascal mailing list