[fpc-pascal] Weird string behavior

Bart bartjunk64 at gmail.com
Fri Jul 22 12:55:35 CEST 2016


On 7/22/16, Santiago A. <svaa at ciberpiula.net> wrote:

>   // is Utf8StrA now utf8string? or something similar like Ansistring(UTF_8)
>   // is Utf8StrB now utf8string? or something similar like Ansistring(UTF_8)

Just check the vaue of StringCodePage(Utf8StrA).

procedure DisplayBytes(S:RawByteString);
var
  i:Integer;
begin
  Write('  ');
  for i:=1 to length(s) do
    write(ord(s[i]),' ');
  writeln;
end;

var
  AnsiStrA: String;
begin
  AnsiStrA:=' ';
  AnsiStrA[1]:=#243; // o acute win-1252
  AnsiStrA := AnsiToUtf8(AnsiStrA);
  writeln('StringCodePage(AnsiStrA) now is: ',stringcodepage(ansistra));
  Write('AnsiStrA: ');DisplayBytes(AnsiStrA);
end.

Gives:
StringCodePage(AnsiStrA) now is: 65001
AnsiStrA:   195 179

Notice that your original problem was mainly due to the fact that
DisplayBytes used a String parameter, which lead to automatically
converting everything back to your Windows codepage.

Bart



More information about the fpc-pascal mailing list