On Thu, 24 Dec 2015, Lubos Pintes wrote:
Hello,
Here is a minimal program, it doesn't work as I expected either because
there is a bug somewhere in the RTL, or, more probably, I misunderstood
something.
Basically, I am reading an UTF-8 encoded text from stdin, and collecting
it in a WideChar array. I am assigning UTF-8 string to a WideString, and
then collecting chars from it into the mentioned array.
Then I am using a SetString procedure to recreate the WideString from
collected chars.
Here is a simple program which demonstrates this:
program a;
{$mode delphi}
uses SysUtils;
var
U: UTF8String;
S, W: WideString;
begin
U := 'Hello';
W := U;
SetString(S, @W[1], Length(W));
This is the problem, not the call to Format.
If you do a writeln('S : ',S); you will see that S is already wrong.
Change it to
SetString(S, @W[1], Length(W)*SizeOf(WideChar));
and all should go well.
Michael.
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal